为了方便操作,这里使用docker(docker安装与使用详见:链接)
环境准备
- 创建网桥
docker network create nw-ms
- 主MySQL环境:
docker run -it --name=master --network=nw-ms --network-alias=master uetty/mysql:5.7.23
vim /etc/mysql/mysql.conf.d/mysqld.cnf
添加两行
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
- 重启MySQL
service mysql restart
- 退出容器
ctrl + p && ctrl + q
- 从MySQL环境:
docker run -it --name=slave --network=nw-ms --network-alias=slave uetty/mysql:5.7.23
vim /etc/mysql/mysql.conf.d/mysqld.cnf
添加两行
server-id = 100
log_bin = /var/log/mysql/mysql-bin.log
- 修改从服务器UUID使其不跟主服务器一样(使用docker部署同一台机子上会出现uuid一样的情况)
vim /var/lib/mysql/auto.cnf
- 重启MySQL
service mysql restart
- 退出容器
ctrl + p && ctrl + q
创建从服务器登陆主服务器账号并授权
- 进入主服务器
docker exec -it master bash
- 登陆mysql:
mysql -uroot -p123456
- 创建账号并授权
create user root@'slave.nw-ms' identified by '123456';
登陆用户ip限制根据需要随意放宽
grant replication slave on *.* to 'root'@'slave.nw-ms' identified by ‘123456’;
flush privileges;
- 查看当前log文件名及位置作为同步起始点(保证主库停止更新的情况下,如果还有更新任务,应暂时锁表禁止更新
FLUSH TABLES WITH READ LOCK
,待主从库数据相同,并且记录下主库file和position之后再解除UNLOCK TABLES;
)
show master status;
如下所示,记录下File和Position
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 752 | | | |
+------------------+----------+--------------+------------------+-------------------+
- 退出主服务器
ctrl + p && ctrl + q
从服务器配置
确保从服务器数据与主服务器相同
- 进入从服务器
docker exec -it slave bash
- 登陆mysql:
mysql -uroot -p123456
- 设置同步参数
change master to master_host='master', master_user='root', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=752;
注:此处master_host
对应docker容器运行时的--network-alias
,也可直接使用ip地址,master_log_file
和master_log_pos
即对应前面show master status;
所显示的数据 - 开始同步
start slave;
- 验证是否成功
show slave status\G
,查看列出的信息内的以下两个参数值是否不为NO,否则同步失败,若同步失败可关注Last_IO_Error
参数找出同步失败原因
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- 最后就可以在主库中写一些数据试试看了