mysql常规主从复制跟基于GTID的主从复制方法
一,环境部署
192.168.113.129
193.168.113.130
二进制部署mysql5.7的方法见mysql5.7二进制部署,以及部分优化参数
二,mysql基于二进制日志点的复制
1,在mysql主从上面创建复制账号
>create user slave@'192.168.113.%' identified by '123456';
2,授权该账号拥有主从库的所有操作权限
>grant replication slave on *.* to slave@'192.168.113.%';
3,配置主数据库服务器
vim /etc/my.cnf
#在mysqld下面添加类容
log_bin=mysql-bin #开启二进制日志,并指定存储目录(mysql-bin),如果未启动二进制日志,则重启后才能生效
server-id=50 #需要指定serverid,在复制集群中必须唯一,主从id不能相同, 建议:server-id 可以用主机ip的后几段
binlog_format=row
4,配置从数据库服务器
vim /etc/my.cnf
log_bin=mysql-bin
binlog_format=row
server-id=51
relay_log=mysql-relay-bin
#log_slave_update=on
read_only=on # 安全配置参数,防止从写入,从库只读
relay_log 启动了主从复制,该参数就会默认启动,但在默认情况下,参数名字是主机名字,如果因为某种原因更改了主机名的命名策略,这时在启动了从服务器的复制链路的就会报找不到原来的中继日志的错误,从而中断主从复制的链路,所以要更改中继日志的名字,这样就不会造成复制链路的中断了
log_slave_update=on 决定是否要把sql线程存放的中继日志记录到从服务器本机的二进制日志中,如果后续要做链路复制,要把该从服务器作为其他从的主服务器,该参数必须配置
5,从库初始化同步主库所有数据
在主库上面备份所有数据
为保持数据库的一致性主库不要有写入操作
mysqldump -uroot -p --all-databases --skip-lock-tables > all.sql
scp all.sql root@192.168.113.130:/root
从库导入数据
mysql -uroot -p < all.sql
可以使用xtrabackup –slave-info 热备工具进行快速备份
6,在从库上面配置启动主从配置连接
主库上查看binlog日志信息
>show master status;
从库配置链接
>change master to master_host='192.168.113.129',master_user='slave',master_password='123456',MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=946;
>start slave; #启动从
>show slave status\G; # 查看状态
注意防火墙跟selinux的设置
7,验证效果
可以在从库创建新的表
或者在原有的表插入数据等
查看从库是否有新建的数据
优点:
1.是mysql最早支持的复制技术,BUG相对较少。
2.对SQL查询没有任何限制。
3.故障处理比较容易。
缺点:
故障转移时重新获取新主的日志点信息比较困难。
指定偏移量错误的时候会可能出现问题
三,mysql基于GTID的复制方式
从MYSQL5.6 开始,mysql开始支持GTID复制。
1,基于日志点复制的缺点
从那个二进制日志的偏移量进行增量同步,如果指定错误会造成遗漏或者重复,导致数据不一致。
基于GTID复制:
从服务器会告诉主服务器已执行的事务的GTID值。
主库会告诉从哪些GTID事务没有被执行。
同一个事务在指定的从库执行一次。
2,什么是GTID
GTID即全局事务ID,器保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID.
GTID=source_id:transaction_id
source_id:是主库的server UUID,在数据目录的auto.cnf 文件中。
transaction_id: 从1开始的一个序列。
3,基于GTID复制的步骤
在主库上创建复制账号及授权
>create user slave@'192.168.113.%' identified by '123456';
>grant all privileges on *.* to slave@'192.168.113.%' identified by '123456';
4,配置主数据库配置信息
vim /etc/my.cnf
log_bin=mysql-bin
server_id=50
gtid-mode=on #打开GTID
#强制事务一致性,保证事务的安全
#注意如果使用了基于事务点日志配置下面两种情况不能使用:
#1.create table 。。select
#2.在事务中使用create temporary table 建立临时表,使用关联更新事务表和非事务表。
enforce_gtid_consistency
#在从服务器记录主服务器发过来的修改日志(5.7之前必须有),增加了IO负载
log-slave-updates=on
5,配置从数据库服务器
vim /etc/my.cnf
server_id=51
log_bin=mysql-bin
relay_log=mysql-relay-bin
gtid-mode=on
enforce-gtid-consistency
read_only=on #建议配置,保证从服务器数据安全性建议配置
master_info_repository=TABLE #从服务器连接主服务器的信息和中继日志存放咱 master_info,和relay_log中。
relay_log_info_repository=TABLE
6,从库初始化同步主库所有数据
在主库上面备份所有数据
为保持数据库的一致性主库不要有写入操作
mysqldump -uroot -p --all-databases --skip-lock-tables > all.sql
scp all.sql root@192.168.113.130:/root
从库导入数据
mysql -uroot -p < all.sql
可以使用xtrabackup –slave-info 热备工具进行快速备份
7,从库启动基于GTID的复制
>change master to master_host='192.168.113.130',master_user='slave',master_password='123456',master_auto_position=1;
>start slave; #启动从库
>show slave status\G; #查看状态
8,验证效果
可以在从库创建新的表
或者在原有的表插入数据等
查看从库是否有新建的数据
四,常见设计复制拓扑