mysql作为一个开源免费的数据库经常在工作中或学习中会使用到,于此记录其主从复制的步骤。
参考资料:慕课网,mysql5.7复制实战课程
另外MySQL 5.6 后加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。参考文章MySQL 5.6 全局事务 ID(GTID)实现原理(这是一个系列说明,可以看一看)
配置相关(my.cnf):
主服务器配置(master)
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server_id=128
binlog_format=mixed (日志格式 ,参考文章:MySQL Binlog三种格式介绍及分析)
innodb_flush_log_at_trx_commit=1
sync_binlog=1
log-slave-updates
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
从服务器配置(salve)
server_id=130
binlog_format=mixed
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
user=mysql
master-info-file = master.info
relay-log = relay-relay-bin
relay-log-index = relay-relay-bin.index
relay-log-info-file=relay-relay-log.info
(配置文件这一块比较复杂,在下也没有深入研究,以上只是参考,具体可以自行百度)
一、基于日志的服务
1: 创建用户 create user 'master'@'192.168.128.%' identified by '123456'; //mysql 5.6以后建议使用这个操作
2:授权 grant replication slave on *.* to master@'192.168.128.%';
3: 备份主库
mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p >t_sync.sql
--master-data=2 该参数是位置在导出sql文件的时候记录日志文件和日志点
这2个参数主要是告诉从服务器要从那个日志文件,以及日志文件的那个位置开始同步。
也可以使用show master status; 命令在主服务器上查看
4: 用scp命令将备份的数据拷贝到从服务上
5:在从服务器上恢复主库的数据 mysql -uroot -p <t_sync.sql
6: 在从服务器上运行change master命令
change master to master_host='192.168.128.128', master_user='master',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=4044;
注意:最后一个是数字,不能用单引号。
7:使用start slave 启动从服务器上的同步进程 使用show slave status\G 查看主从图片状态
slave_io_running:表示同步日志的io进程
slave_sql_running:表示执行同步sql命令的进程
这个2个必须为yes,否则表示配置失败(如果配置失败请检查3306端口是否有对外开放)
最后就可以在主服务器上开始创建表库,插入数据做测试了