一.在服务器上安装MySQL数据库,我通过yum安装MySQL8.0版本的数据库来进行演示。
1.首先尝试直接从MySQL网站导入官方的GPG密钥。
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
2.然后尝试安装MySQL的yum仓库文件。
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
rpm -ivh mysql80-community-release-el7-11.noarch.rpm
3.安装MySQL服务器。
yum clean all
yum -y install mysql-community-server
mysql --version
如果这一步出现了报错,请检查/etc/yum.repos.d/mysql-community.repo
文件中的GPG检查设置。你可以临时禁用GPG检查来测试是否是GPG密钥的问题。在/etc/yum.repos.d/mysql-community.repo
这个文件中找到gpgcheck=1
并将其改为gpgcheck=0
,然后保存并退出编辑器,并再次执行第3步。
4.启动MySQL数据库并设置开机启动。
systemctl start mysqld
systemctl enable mysqld
5.修改初始密码后登录数据库。
grep password /var/log/mysqld.log
找到密码后可以使用mysqladmin命令来修改MySQL数据库的用户密码
mysqladmin -u root -p'上条命令中找到的密码' password '你想要设置的密码'
mysql -uroot -p'你设置的密码'
进入数据库后可以输入exit退出
至此,在服务器上安装MySQL数据库就算是完成了。如果只是需要单机部署MySQL数据库到此为止即可。
二.接下来开始做主从配置
1.在另外一台服务器上执行上述操作,安装MySQL数据库
2.主从服务器均需要关闭防火墙和selinux服务,如果使用的是云服务器则需要在对应云平台的服务器安全组里调整规则,将服务器彼此加入自己的白名单里。两台机器环境必须一致。时间也得一致。
setenforce 0
systemctl stop firewalld
3.在主库服务器的操作
vim /etc/my.cnf
添加如下内容后保存退出
log-bin=/var/log/mysql/mysql-bin
server-id=1
mkdir /var/log/mysql
chown -R mysql.mysql /var/log/mysql
systemctl restart mysqld
mysql -uroot -p'MySQL@666'
use mysql
SELECT User, Host FROM user;
CREATE USER IF NOT EXISTS 'slave'@'%' IDENTIFIED BY 'MySQL@666';
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.* TO 'slave'@'%';
flush privileges;
SELECT User, Host FROM user;
4.在从库服务器的操作
vim /etc/my.cnf
添加如下内容后保存退出
server-id=2
systemctl restart mysqld
mysql -uroot -p'MySQL@666'
5.在主库数据库的操作
show master status;
6.在从库数据库的操作
\e
CHANGE REPLICATION SOURCE TO
MASTER_HOST='主库ip',
MASTER_USER='slave',
MASTER_PASSWORD='MySQL@666',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=157;
;
start slave;
show slave status\G
看到IO线程和SQL线程的状态均为Yes,则主从同步已完成。
7.我们接下来可以检验一下
在主库
CREATE DATABASE test;
use test
CREATE TABLE people (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT CHECK (age >= 0 AND age <= 120),
gender ENUM('Male', 'Female', 'Other') NOT NULL
);
INSERT INTO people (name, age, gender) VALUES
('张三', 28, 'Male'),
('李四', 34, 'Female'),
('王五', 45, 'Male'),
('赵六', 22, 'Other'),
('孙七', 30, 'Female');
SELECT * FROM people;
在从库
use test
SELECT * FROM people;
主从同步非常成功