MySQL主备是最简单的MySQL集群,和单机MySQL相比,只多了一个用于同步备份的MySQL。
两个MySQL实例。第一个和普通单机MySQL一样,提供读取和写入数据。第二个MySQL只能从第一个MySQL中同步数据,不能写入其他数据,但是可以读取数据。
主节点将数据操作历史写入 binary log,备节点从主节点获取从指定位置开始的 binary log,写入自己的 relay log,然后读取 relay log,执行相应的数据操作,实现同步。
这里用两台腾讯云 Ubuntu 20.04 主机演示,已经分别安装好了MySQL(可以参考:使用Generic二进制包安装MySQL8)。确保主节点的3306端口在防火墙中放通,可以从备节点访问。
主机 | IP |
---|---|
主节点 | 10.0.16.12 |
备节点 | 10.0.16.16 |
MySQL 的 binary log 功能默认是开启的。
步骤【1】编辑配置文件 /etc/my.cnf,在 [mysqld] 后面添加 server-id
[mysqld]
server-id = 1
步骤【2】重启 MySQL
sudo systemctl restart mysql
步骤【3】登录 MySQL,添加同步用户
CREATE USER 'replicauser'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'replicauser'@'%';
步骤【4】查询当前 binary log 的位置
SHOW MASTER STATUS\G
可以看到输出,记录下 File 和 Position 的内容
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: binlog.000002
Position: 703
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
同步默认是关闭的。
步骤【1】编辑配置文件 /etc/my.cnf,在 [mysqld] 后面添加 server-id
[mysqld]
server-id = 2
步骤【2】重启 MySQL
sudo systemctl restart mysql
步骤【3】获取主节点的 public key
mysql -uroot -p123456 -h10.0.16.12 --get-server-public-key
这一步很关键。MySQL8 中,备节点通过同步用户拉取主节点的 binary log,需要建立 SSL 连接。如果没有主节点的 public key,同步状态中时会看到连接错误
Last_IO_Error: error connecting to master 'replicauser@10.0.16.12:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
步骤【4】登录 MySQL,设置从主节点同步
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.0.16.12',MASTER_USER='replicauser', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=703;
START SLAVE;
步骤【5】查看同步状态
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.16.12
Master_User: replicauser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 703
Relay_Log_File: VM-16-16-ubuntu-relay-bin.000002
Relay_Log_Pos: 323
Relay_Master_Log_File: binlog.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
步骤【6】验证
主备配置完成以后,可以在主节点插入数据,看备节点是否会同步
利用持续部署系统,把以上步骤编排为流水线,在新节点上就可以自动完成配置。这里使用的持续部署系统是 Y20持续部署,流水线也编排好了 双节点配置MySQL主备同步。步骤和变量如下:
主节点:
备节点:
名称 | 说明 |
---|---|
MSTER_AGENT | 主节点 |
MASTER_ROOT_PASSWORD | 主节点 MySQL 的 ROOT 密码 |
MASTER_SERVER_ID | 主节点 server-id,默认 1 |
MSTER_REPLICA_USERNAME | 主节点同步用户名,默认 replicauser |
MASTER_REPLICA_PASSWORD | 主节点同步用户密码,默认 123456 |
SLAVE_AGENT | 备节点 |
SLAVE_ROOT_PASSWORD | 备节点 MySQL 的 ROOT 密码 |
SLAVE_SERVER_ID | 备节点 server-id,默认 2 |
接入自己的两个节点,运行流水线
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有