基于事务的 Replication(利用 GTID 来实现的复制)实现主从复制
GTID(全局事务标示符)最初由google实现,在MySQL 5.6中引入.GTID在事务提交时生成,由UUID和事务ID组成.uuid会在第一次启动MySQL时生成,保存在数据目录下的auto .CNF文件里,事务ID则从1开始自增使用GTID的好处主要有两点:
不再需要指定传统复制中的master_log_files和master_log_pos,使主从复制更简单可靠
可以实现基于库的多线程复制,减小主从复制的延迟
实验环境要求: 5.7.6 以上版本
- 主库配置 /etc/my.cnf
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1 # 强制执行GTID一致性。
- 创建日志目录并赋予权限
shell> mkdir /var/log/mysql
shell> chown mysql.mysql /var/log/mysql
- 重启服务
shell> systemctl restart mysql
- 在主服务器创建一个仅具有复制过程权限的单独帐户,以最大程度地降低对其他帐户的危害。
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'Www.1.com';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
- 在主服务器创建一个仅具有all权限的单独帐户,用于从服务器远程拷贝原有的数据。
mysql> CREATE USER 'tom'@'%' IDENTIFIED BY 'Www.1.com';
mysql> GRANT ALL ON *.* TO 'tom'@'%';
mysql> k
flush privileges;
- 在从服务器上使用刚才的用户进行测试连接
shell> mysql -urepl -p'Www.1.com' -hmaster_ip
shell> mysql -utom -p'Www.1.com' -hmaster_ip
//master_ip为主服务器IP
主服务器中有数据
- 在从服务器中导出主服务器原有的数据
shell> mysqldump -ualice -pWww.1.com -hmaster_ip --all-databases > dump.sql
//master_ip为主服务器IP
- 将主服务器数据恢复到从服务器上
mysql -u账号 -p密码 < dump.sql
//从服务器拥有权限的用户
配置从服务器
- 配置从服务器的 /etc/my.cnf
[mysqld]
server-id=2
- 配置完重启从服务器
shell> systemctl restart mysqld
- 进入从服务器mysql,执行如下操作
mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_USER='repl',
MASTER_PASSWORD='Www.1.com',
MASTER_AUTO_POSITION=1;
mysql> start slave;
- 检查是否成功
show slave status\G
输出结果中应该看到 I/O 线程和 SQL 线程都是 YES, 就表示成功。