Loading... # 引言 为了保证MySQL的高可用性,避免MySQL服务挂掉导致更严重的生产事故,因此需要保证多台机器数据均一致,并且降低恢复成本,采用GTID双主服务。实际上GTID也是以来binlog来实现的。 # 测试机器 - centos8 - mysql 8.0.20 # 配置过程 ## 分别配置双机的my.cnf ```properties server-id=129 -- 注意这个地方需要保证不一致,我这里是ip地址的后部分 gtid-mode=on enforce-gtid-consistency=on log-slave-updates=on log-bin-index=mysql-bin.index log_bin=mysql-bin binlog-format=mixed ``` 如果需要排除部分库,可添加配置 ```properties replicate_ignore_db = db1 replicate_ignore_db = db2 replicate_ignore_db = db3 ``` 其中db1,db2为库名 ## 修改auto.cnf 切换到data目录,这里可以在my.cnf中找到 ![image.png](https://www.zunmx.top/usr/uploads/2024/06/2553897168.png) 切换到data目录 `/home/mysql/data ` 修改auto.cnf文件内容,这里保证两台机器的uuid<span style='color:#ff0000'>不一致</span> ```bash vi auto.cnf ``` <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-37726ed087614b145bcb066f4fa3049676" aria-expanded="true"><div class="accordion-toggle"><span style="">vi 快捷键</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-37726ed087614b145bcb066f4fa3049676" class="collapse collapse-content"><p></p> i编辑 上下左右光标 若要保存,先`esc`键,输入`:wq` <p></p></div></div></div> ![image.png](https://www.zunmx.top/usr/uploads/2024/06/178992418.png) ## 重启MySQL服务 因为修改了MySQL的配置,需要重启一下MySQL服务,如果提示错误,看日志,如果不是配置文件的问题,考虑一下是不是selinux,通过 `setenforce 0 `暂时关闭selinux ![image.png](https://www.zunmx.top/usr/uploads/2024/06/398731638.png) ## 创建 `syncer`账号 这里仅提供样例,用户名和密码需自行设置 ```sql CREATE USER 'syncer'@'%' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd'; GRANT REPLICATION SLAVE ON *.* TO 'syncer'@'%'; flush privileges; ``` ## 启动slave服务 ⚠ 注意,这里的IP,用户名、密码、端口,需要以实际情况进行设置 第一台服务 ```sql change master to MASTER_HOST='192.168.204.132', MASTER_USER='syncer', MASTER_PASSWORD='P@ssw0rd', MASTER_PORT=3306, MASTER_AUTO_POSITION=1; ``` 第二台服务 ```sql change master to MASTER_HOST='192.168.204.129', MASTER_USER='syncer', MASTER_PASSWORD='P@ssw0rd', MASTER_PORT=3306, MASTER_AUTO_POSITION=1; ``` 分别在两台机器上执行`start slave;`启动同步服务 ## 检查服务状态 ```sql show slave status\G ``` ![image.png](https://www.zunmx.top/usr/uploads/2024/06/2213107323.png) 当框框里面的都是YES即为设置成功。 # 验证 左侧添加,右侧自动添加 右侧添加,左侧自动添加 ![image.png](https://www.zunmx.top/usr/uploads/2024/06/2753304345.png) 左侧删除,右侧自动删除 右侧删除,左侧自动删除 ![image.png](https://www.zunmx.top/usr/uploads/2024/06/1416683736.png) 模拟数据库服务A挂掉,在B服务器上操作,当A再次上线,回复B上的操作 ![image.png](https://www.zunmx.top/usr/uploads/2024/06/4247157447.png) # 备注 ## 备份数据库 ```bash mysqldump -uroot -p --set-gtid-purged=ON –databases db1 db2 db3 --single-transaction --master-data=2 --triggers --routines --events > database.sql ``` ## 清除slave配置 ```sql reset slave all; ``` ## 清除binlog ```sql reset master; ``` ## 重启slave ```sql stop slave; start slave; show slave status\G ``` # 备忘录 测试时执行的命令,此处并非文章内容,仅供高效率执行。(C) <div class="hideContent">该部分仅登录用户可见</div> © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏