mysql数据库安装参考再次不在详述,本文采用的是mysql8.0.12
介绍
主从复制涉及单个主服务器和多个从服务器,结构图如下,所有的主从复制都是基于binary log
打开主从复制有以下几步
- 在Master服务器上打开binary logging
- 在Master服务器上创建用于远程复制的用户
- 在Slave服务器上设置唯一的server_id
- 在Master上获取Master服务器的备份集
- 在Slave上恢复数据库
下面我们来一步一步操作以下。
安装
一 开启binary logging
1 设置log-bin路径以及server-id
vi /etc/my.cnf
log-bin = /app/mysql/mysqldata/3306/binlog/mysql-bin
server-id = 1203306
2 重启Mysql数据库
systemctl restart mysqld
3 验证是否启动成功
SHOW VARIABLES LIKE 'log_bin%';
ls -lhtr /app/mysql/mysqldata/3306/binlog
如图代表配置正确
二 在Master服务器上创建用于远程复制的用户
create user 'binlog_user'@'%' identified by 'binlog_user';
grant all on *.* to 'binlog_user'@'%';
flush privileges;
三 在Slave服务器设置SERVER_ID
必须保证在集群环境中的每一个SERVER_ID是唯一的,不能相同
SET @@GLOBAL.SERVER_ID = 21203306;
四 在Slave服务器备份数据库
以下两种方案二选一
mysqldump -h <master_host> \
-u backup_user \
--password=<pass> \
--all-databases \
--routines --events \
--single-transaction \
--master-data > dump.sql
可以增加–slave-dump从Slave节点备份数据
安装mydumper可以参看下面这篇文章
https://blog.csdn.net/ciqingloveless/article/details/82866791
mydumper -h <master_host> \
-u backup_user \
--password=<pass> \
--use-savepoints \
--trx-consistency-only \
--kill-long-queries \
--outputdir /app/mysql/mysqldata/backup
五 在Slave恢复数据库
以下两种方案二选一
执行dump.sql将现有数据导入到数据库
mysql -u <user> -p -f < dump.sql
myloader \
--directory=/backups \
--user=<user> \
--password=<password> \
--queries-per-transaction=5000 \
--threads=8 \
--overwrite-tables
六 开启Slave数据库
在mysql中执行
CHANGE MASTER TO MASTER_HOST='<master_host>', MASTER_USER='binlog_user', MASTER_PASSWORD='binlog_P@ss12', MASTER_LOG_FILE='<log_file_name>', MASTER_LOG_POS=<position>
本文参数
CHANGE MASTER TO MASTER_HOST='192.168.200.101', MASTER_USER='root', MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=5045;
其中<log_file_name> and <position>这两个参数包含在了刚才导出的dump.sql文件中,通过以下命令查看
在系统中执行
cd /usr/MyWorkSpace/
less dump.sql
在mysql中执行
START SLAVE;
SHOW SLAVE STATUS\G;
如果要从从站或主站备份以设置另一个从站,则必须使用SHOW SLAVE STATUS中的位置。如果要设置链复制,可以使用SHOW MASTER STATUS中的位置。
附录:
1 ERROR 3546错误
ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
在Slave执行
reset master;