架构图

双写同步 replication 集群
创建同步账号
- 使用
root账号进行创建CREATE USER ‘backup’@’%’ IDENTIFIED BY “Root666.”; GRANT super,reload,replication slave ON . TO ‘backup’@’%’; flush privileges;
双主都开启 binlog 和 relaylog
[mysqld]## 其他配置# 集群中 server_id 要求不一致server_id = 100# 开启 binlog 日志,并且设置 binlog 日志名称log_bin = mysql_bin# 中继日志。作为 replication 的从库时,会读取主库的 binlog 写入到 relay_log 中relay_log=relay_bin# 表示 slave 将复制事件写进自己的 binloglog_slave_updates##主从复制的 格式 mixed,statement,row ,默认格式是 statementbinlog_format=row################################################################################################ gtid,可选##############################################################################################gtid_mdoe=on## gtid_mode 的前置条件enforce_gtid_consistency# log-slave-updates=on # 上面设置过了master_info_repository=TABLErelay_log_info_repository=TABLE################################################################################################ 其他可选配置################################################################################################复制过滤: 指明需要备份的数据库,注意一条指令只能配置一个database# binlog-do-db=test##复制过滤: 知名不需要备份的数据库 不输出 mysql 库 一般不同步)注意一条指令只能配置一个database# binlog-ignore-db=mysql## 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave 端复制中断。## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致slave_skip_errors=1062,1032
配置主从同步
- 在从库上执行 sql 语句
STOP SLAVE; CHANGE MASTER TO master_host=’
‘, master_port = ‘ ‘, master_user=’ ‘, master_password=’ ‘; START SLAVE;
查看主从同步状态
SHOW SLAVE STATUS; # 下方字段为 YES 表示成功
再另一台从库中也执行上述步骤,成为双向同步架构
主从同步状态异常
SHOW SLAVE STATUS;

查看 error_log,
cat /var/log/mysqld.log[ERROR] Slave I/O for channel '': Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;these UUIDs must be different for replication to work. Error_code: 1593
sql 中查看
show variables like '%server_uuid%';发现 UUID 的确一样- 因为两个虚拟机我是直接 copy 的,造成 UUID 一样
- 解决
找到
auto.cnf,修改 server_uuidfind / -name auto.cnf vim /var/lib/mysql/auto.cnf
重启 mysql
systemctl restart mysqld;
然后再 sql 中再次执行
STOP SLAVE; START SLAVE;
其他配置
- 可以指定 3 个参数, 用于复制线程重连主库
- master-retry-count
- 需要在 Change Master 搭建主备复制时指定
- master-connect-retry
- 需要在 Change Master 搭建主备复制时指定
- slave-net-timeout
- 是一个全局变量,可以在 MySQL 运行时在线设置
- master-retry-count
- todo 重试策略
配置 HaProxy 和 Keepalived
- 和之前的类似
- 该 replication 集群对外暴露一个虚拟 IP
