目前环境基本都是使用基于gtid的主从复制,从库的搭建可以使用mysqldump或者XtraBackup,下面分别介绍:
使用XtraBackup搭建从库(建议使用)
数据量大的首选,推荐使用。步骤如下:
- 主库执行备份脚本:/opt/mysql/scripts/mysqlbackup_temp.sh,备份目录默认在/opt/xxx/tempback下,具体目录在备份日志最后有输出,类似:190802 16:42:33 Backup created in directory '/opt/tempback/20190802164050'
- 把备份目录copy到从库服务器上
- 在从库执行恢复操作:/opt/mysql/scripts/mysql_recovery.sh /opt、tempback/20190802164050,该脚本可指定一个参数,意为备份目录。执行完,MySQL已经启动好了
- 从库执行reset master命令:mysql -uroot -p -e "reset master;"
- 从库执行set GTID_PURGED命令:set global GTID_PURGED='XXXXXX:XXXX',此gtid串在备份目录中的xtrabackup_binlog_info文件记录了。
- 从库执行change master命令:CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='xxslave', MASTER_PASSWORD='gudongslave', MASTER_PORT=3306, MASTER_AUTO_POSITION=1;
- 从库启动复制,并观察复制状态:start slave; show slave status\G
创建必要的用户
创建用户 |
SQL语句 |
---|---|
创建复制用户gudongslave | grant replication slave,replication client on *.* to xxslave identified by 'xxslave'; |
创建备份用户 | grant all on *.* to backup identified by 'backup'; |
使用mysqldump搭建从库
适用于数据量小的情况。步骤如下:
- 主库执行mysqldump,导出整库:mysqldump -uroot -p --set-gtid-purged=ON --all-databases --triggers --routines --events > all_db.sql
- 从库执行reset master命令:mysql -uroot -p -e "reset master;"
- 从库执行dump的SQL文件:mysql -uroot -p < all_db.sql
- 从库执行change master命令:CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='xxslave', MASTER_PASSWORD='gudongslave', MASTER_PORT=3306, MASTER_AUTO_POSITION=1;
- 从库启动复制,并观察复制状态:start slave; show slave status\G