准备两台服务器(能够是虚拟机),系统为centos7mysql
此处演示的两台服务器:192.168.8.13四、192.168.8.135sql
先在两台服务器上安装mysql5.7.24,安装可参考:shell
安装成功后,启动mysql。若是是虚拟机的话,在一台安装好以后,可使用克隆功能,克隆后的虚拟机也会有安装好的mysql。数据库
配置以前,先在两台服务器上开启mysql。vim
master:192.168.8.134centos
slave: 192.168.8.135服务器
建立一个名为repl的用户测试
CREATE USER repl IDENTIFIED BY 'L2019Mysql@';
受权slave数据库REPLICATION 权限ui
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'L2019Mysql@';
受权slave服务器能够经过repl用户能够远程访问master,来读取binlog中数据,实现数据同步。centos7
修改my.cnf配置文件
sudo vim /etc/my.cnf
在/etc/my.cnf的[mysqld]下加入以下配置:
# 启用二进制日志文件 log-bin=mysql-bin # 服务器惟一ID server-id=1
log-bin: 开启binlog
server-id:指定服务器id(惟一,不能与slave服务器server-id相同)
重启mysql
sudo systemctl restart mysqld
查看master二进制文件名称和偏移量
show master status;
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+
此处二进制文件名称为:mysql-bin.000002,偏移量为:154
修改my.cnf配置文件
sudo vim /etc/my.cnf
在/etc/my.cnf的[mysqld]下加入以下配置:
# 服务器惟一ID server-id=2 # 开启中继日志 relay-log=slave-relay-bin # 开启中继日志索引 relay-log-index=slave-relay-bin.index # 设置只读 read_only=1
此处设置只读是由于,在主从复制的状况下,一般数据写入master,从slave中读取数据。
重启mysql
sudo systemctl restart mysqld
创建同步链接
CHANGE MASTER TO master_host = '192.168.8.134', master_port = 3306, master_user = 'repl', master_password = 'L2019Mysql@', master_log_file = 'mysql-bin.000002', master_log_pos = 154;
master_host: master服务器ip
master_port: master上mysql服务端口
master_user: 配置master时建立的repl用户
master_password: master上repl用户密码
master_log_file: 配置master第5步查询到的二进制日志文件名称
master_log_pos: 配置master第5步查询到的偏移量
启动slave
start slave;
查看slave状态
show slave status \G
此时Slave_IO_Running、Slave_SQL_Running值都是Yes,说明主从复制配置成功
在master上新建一个名为test的数据库
create database test;
在slave上查看
show databases;
能够看到test数据库已经同步到slave上了
我在查看slave状态时,发现 Slave_IO_Running: No
查看日志
tail -f /var/log/mysqld.log
发现上面的错误。
缘由:我在master: 192.168.8.134 上安装好mysql以后,使用克隆功能,建立了slave:192.168.8.135,致使master和slave上的server-uuid相同。
在master和slave上分别查看server-uuid
sudo cat /var/lib/mysql/auto.cnf
发现值都是:server-uuid=a1ae101b-13e3-11e9-8f07-000c29b2fc93
解决方法:
先重命名slave上的auto.cnf
sudo mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bk
而后重启slave上的mysql
sudo systemctl restart mysqld
查看slave状态
show slave status \G
此时Slave_IO_Running、Slave_SQL_Running值都是Yes,说明主从复制配置成功