IT评测·应用市场-qidao123.com技术社区

标题: MySQL 双向同步配置 [打印本页]

作者: 北冰洋以北    时间: 2025-3-20 10:57
标题: MySQL 双向同步配置
分别配置mysql1和mysql2互为主从,实现双主摆设
参考:MySQL数据库实现主主同步_mysql主主同步-CSDN博客
MySQL 高可用性—keepalived+mysql双主(有详细步骤和全部配置项解释)-腾讯云开发者社区-腾讯云
Mysql主从复制原理


从上图看大致分成三个步骤
一.准备工作

1.准备两台假造机


2.下载免安装版的mysql

mysql8.0免安装下载网址:https://dev.mysql.com/downloads/mysql/8.0.html
参考:MySQL 8.0.20安装教程(Win10)—— 免安装版_安装mysql8.0.20-CSDN博客
参考:MySQL完全卸载以及安装8.0版本(Windows11版本一步到位)_mysql8.0完全卸载教程-CSDN博客
2.1卸载之前的mysql8.0

假如之前电脑上安装了mysql,需要删除否则大概导致免安装版安装的时候报错


2.2下载mysql8.0免安装版

复制网址到浏览器中,下载mysql8.0免安装版,下载完是个zip压缩包

下载完成后解压到本地,刚下完没有my.ini配置文件,需要手动创建

my.ini的根本配置,basedir和datadir需要根据路径做调整
  1. [mysqld]
  2. # 设置3306端口
  3. port=3306
  4. # 设置mysql的安装目录,一定要与上面的安装路径保持一致
  5. basedir=C:\\Program Files\\MySQL\\mysql-8.0.40-winx64
  6. # 设置mysql数据库的数据的存放目录,自动生成,无需手动创建,当然也可以放在其他地方
  7. datadir=C:\\Program Files\\MySQL\\mysql-8.0.40-winx64\\Data
  8. # 允许最大连接数
  9. max_connections=200
  10. # 允许连接失败的次数。
  11. max_connect_errors=10
  12. # 服务端使用的字符集默认为utf8mb4
  13. character-set-server=utf8mb4
  14. # 创建新表时将使用的默认存储引擎
  15. default-storage-engine=INNODB
  16. # 默认使用“mysql_native_password”插件认证
  17. #mysql_native_password
  18. default_authentication_plugin=mysql_native_password
  19. [mysql]
  20. # 设置mysql客户端默认字符集
  21. default-character-set=utf8mb4
  22. [client]
  23. # 设置mysql客户端连接服务端时默认使用的端口,不建议修改,这是公认端口号
  24. port=3306
  25. default-character-set=utf8mb4
复制代码
设置完my.ini后进入bin目录,打开cmd,开启服务
  1. mysqld --initialize --console
  2. mysqld --install
  3. net stop mysql
  4. net start mysql
复制代码



3.修改假造机mysql my.ini读取的位置(免安装版的不用管这个)

遇到的题目:之前不停卡在这一步,刚下载完之后看到没有my.ini就自己创建了一个my.ini,在里面写了server-id=2进去,想测一下mysql服务是否能读取到my.ini,结果不停读取不到,查了资料后发现mysql服务读取的my.ini路径并不是Program Files而是在programData下的MySQL
下面是解决的方法
参考:Windows11下Mysql8.0修改My.ini配置文件未生效的题目_mysql 配置文件修改无效-CSDN博客
下载完默认读取的是C:\ProgramData\MySQL\MySQL Server 8.0目录下的my.ini文件,修改为C:\Program Files\MySQL\MySQL Server 8.0路径下的my.ini文件
win+r输入regedit进入注册表

按照第一个红框的路径找到imagePath后,修改imagePath中读取的my.ini位置

“C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe” --defaults-file=“C:\Program Files\MySQL\MySQL Server 8.0\my.ini” MySQL
修改成上面如许的;指定了MySQL服务的可执行文件路径和配置文件路径

把programdata路径下的my.ini文件复制到programFile下;之后需要修改my.ini的配置

两台假造机都举行如许的配置
4.修改配置文件

  1. [mysqld]
  2. server-id=11     
  3. log-bin=mysql-bin  
  4. auto_increment_increment=2  
  5. auto_increment_offset=1
  6. replicate-do-db=demo_db
复制代码


  1. [mysqld]
  2. server-id=12
  3. log-bin=mysql-bin
  4. auto_increment_increment=2
  5. auto_increment_offset=2
  6. replicate-do-db=demo_db
复制代码
下面的是第二台服务器,因此id和auto_increment_offset需要调整

主机和从机修改完配置文件后都要重启一下mysql服务
登录mysql后,用SHOW GLOBAL VARIABLES LIKE ‘server_id’;检察服务id是否被更改

表明my.ini读取成功
二.第三台计算机用户连接权限题目

在没有给第三胎计算机的用户设置权限的时候,连接假造机的mysql会被拒绝,需要创建用户并添加权限

  1. CREATE USER 'root'@'YUJIANAN' IDENTIFIED BY '123456';
  2. GRANT ALL PRIVILEGES ON *.* TO 'root'@'YUJIANAN';
复制代码
用户YUJIANAN可以用root和123456连接数据库;为了方便授予了all peivileges,包括修改数据库的权限

在两个假造机的mysql中都要给第三台计算机的用户设置权限

修改之后就可以连接上了,并且可以或许对数据库举行修改;
三. mysql1为主mysql2为从配置

1.mysql1创建master11用户

  1. mysql -uroot -p123456
  2. create user 'master11'@'%' identified with mysql_native_password by '#Master11';
  3. GRANT REPLICATION SLAVE ON *.* TO 'master11'@'%';
  4. GRANT REPLICATION CLIENT ON *.* TO 'master11'@'%';
  5. FLUSH PRIVILEGES;
  6. show grants for 'master11'@'%';
  7. show master status;
复制代码
master11用户是在mysql2绑定mysql1数据库时用到的

2.mysql2绑定mysql1数据库

  1. mysql -uroot -p123456
  2. change master to master_host='192.168.154.136',master_user='master11',master_password='#Master11',master_log_file='mysql-bin.000003',master_log_pos=2328;
  3. start slave;
  4. show slave status \G
复制代码

红框内的两个值都是Yes表示已经同步成功,假如不满是Yes会有相应的报错可以看到

这一步后,实现了mysql1为主mysql2为从的配置,接下来再配置mysql2作为主机mysql1作为从机,实现双主的效果
四.mysql2为主,mysql1为从机配置

1.mysql2创建master12用户

  1. mysql -uroot -p123456
  2. create user 'master12'@'%' identified with mysql_native_password by '#Master12';
  3. GRANT REPLICATION SLAVE ON *.* TO 'master12'@'%';
  4. GRANT REPLICATION CLIENT ON *.* TO 'master12'@'%';
  5. FLUSH PRIVILEGES;
  6. show grants for 'master12'@'%';
  7. show master status;
复制代码

2.mysql1绑定mysql2数据库

  1. mysql -uroot -p123456
  2. change master to master_host='192.168.154.138',master_user='master12',master_password='#Master12',master_log_file='mysql-bin.000002',master_log_pos=1080;
  3. start slave;
  4. show slave status \G
复制代码

红框内的两个值都是Yes表示已经同步成功

五.测试结果

1.黑框测试

  1. create database demo_db;
  2. use demo_db
  3. create table demo_tb(id int not null,name varchar(20) default 'username');
  4. insert into demo_tb values(1,'zhangsan'), (2,'lisi'), (3,'kunkun');
复制代码
在假造机mysql1中创建数据库和数据表添加数据

  1. show databases;
  2. select * from demo_db.demo_tb;
  3. use demo_db
  4. insert into demo_tb values(4,'liao'),(5,'chengpi'),(6,'mahua');
复制代码
在假造机mysql1添加了三条数据后在假造机mysql2中也可以查询到

在假造机mysql2中添加了三条数据

  1. select * from demo_tb;
复制代码
假造机mysql1也能查询到

2.navicat测试

mysql1添加一条数据,mysql2中刷新后也会有


mysql2中新建表,mysql1中也会有


3.重启测试

3.1 关闭mysql2

关闭假造机mysql2后重启,重启后mysql1和mysql2的双主模式仍在



3.2 关闭mysql1

关闭假造机mysql1后重启,重启后mysql1和mysql2的双主模式仍在



3.3 关闭mysql2,并在mysql1中写数据

关闭假造机mysql2

关闭了假造机mysql2,连不上假造机mysql2的数据库,在mysql1的demo_tb表中新增了一条数据

重启mysql2后,双主模式仍在


重启后连接假造机mysql2的数据库,数据同步成功

3.4 关闭mysql1,并在mysql2中写数据

关闭假造机mysql1

关闭了假造机mysql1,连不上假造机mysql1的数据库,在mysql2的demo_tb表中新增了一条数据

重启mysql1后,双主模式仍在


重启后连接假造机mysql1的数据库,数据同步成功

3.5 mysql1和mysql2都关闭

同时把mysql1和mysql2关闭

重启后连接假造机mysql1和假造机mysql2的数据库,数据没有丢失


重启mysql1和mysql2后,双主模式仍在


4.关闭主从复制,修改数据库看启动后数据是否同步

可以看到已经把两台假造机的主从关掉了


在假造机mysql1的数据库demo_db下创建新的表


启动假造机mysql1和mysql2的主从模式

同步效果仍在

假造机mysql2数据库demo_tb数据库中的test表自动创建了

5.测试时遇到的题目

5.1重启两台假造机后主从同步失效


这个是12.4遇到的,当时重启了两个假造机后就出现了这个题目;12.5把原来的mysql8.0卸载掉了,用了免安装版重新跑了一下这个流程,也测试了一下两台假造机都重启,结果写在 五.测试结果 3.5mysql1和mysql2都关闭中 ,在12.5没有复现这个题目。
推测大概是因为之前在开启了主从之后又去给第三台计算机的用户添加了权限导致偏移值的变化,后续假如又发现了这个题目再找找原因
5.2 navicat连接失败

本地用户连接不上navicat是因为权限不够,需要在假造机的mysql中授予相应的权限,详情见二.第三台计算机用户连接权限题目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4