环境说明:
master server IP:172.17.61.131
slave server IP:172.17.61.132
mysql version: mysql-5.7.21-linux
目标:61.132的mysql完全是从61.131物理复制过去的,实现主从复制的基本要求。
1.首先修改master的mysql配置文件 /etc/my.cnf
主要增加以下内容:
server-id=10000
log_bin = /u01/mysql/mysql_bin
#skip-grant-tables
innodb_flush_log_at_trx_commit=1
sync_binlog=1
expire_logs_days=10
max_binlog_size=1073741824
修改完后重启数据库!
[root@qht131 backup]# service mysql restart
2.在master上创建用户,用于slave连接登录
mysql> CREATE USER 'repl'@'172.17.61.%' IDENTIFIED BY 'repl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.17.61.%';
3.在master上备份数据库
备份之前先flush tables with read lock,禁止数据库操作,防止产生新的日志。并记住当前的master_log_file以及position。
mysql > FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000008 | 615 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
不要退出当前的session,重开一个ssh进行备份。
[root@qht131 backup]# mysqldump -u root -p --all-databases --master-data >dbdump.db
备份完之后再Unlock tables;
mysql > UNLOCK TABLES;
4.将备份文件复制到slave.
[root@qht131 backup]# scp dbdump.db 172.17.61.132:/u01/backup
至此master所有的配置已完成。
5.配置slave上面的/etc/my.cnf
需要变更和添加的参数如下:
server-id=10001
#log_bin = /u01/mysql/mysql_bin
relay-log=/u01/mysql/slave_relay_bin
expire-logs-days=10
relay_log_recovery=on
relay_log_info_repository=TABLE
重启数据库,这里需要注意的是,重启数据库需要另外修改auto.cnf的server-uuid值,否则在slave应用日志时会出错(由于slave库是直接从master复制过来的原因导致)。
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
将server-uuid随便改掉一个值,不和master的值一样就行:
[root@qht132 software]# cat /u01/mysql/auto.cnf
[auto]
server-uuid=8d8746fb-2cc6-11e8-b1b6-000c295c63e1
[root@qht132 software]# service mysql restart
6.在slave上恢复master的数据
[root@qht132 software]# mysql -p -u root < dbdump.db
7.切换到slave模式:
CHANGE MASTER TO
MASTER_HOST='172.17.61.131',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=615;
MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=615 注意这里一定不能写错了,
这个内容可以在dbdump.db的开头找到,记录着master备份时当前二进制文件的位置,slave在恢复数据后就从这个点开始复制数据。
最后开启slave同步:
mysql> START SLAVE;
可以通过show slave status查看slave库是否有有应用的最新的数据!
完成!