前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MySQL 8.0 实现主从复制

MySQL 8.0 实现主从复制

作者头像
繁华是客
发布2025-03-01 21:16:02
发布2025-03-01 21:16:02
7300
代码可运行
举报
运行总次数:0
代码可运行

MySQL 8 严格来说这个是复制,所以官方的英文文档是Replica,而非Master Slave。 该方法均适用于Linux和Windows的MySQL。

MySQL Setting Up Replicas Digital Ocean - How to Setup Replication

设置主节点

主要以参考Digital Ocean文档为主来修改配置 Linux是查看/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf Windows是查看C:\ProgramData\MySQL\my.ini;

如果有bind-address则要么删除,允许全部ip访问,要么改为进来请求的IP。

代码语言:javascript
代码运行次数:0
复制
bind-address  = source_server_ip

其次server-id = 1,而在从节点,是2/3/4/5… (主节点的id数字是最小的)

代码语言:javascript
代码运行次数:0
复制
[mysqld]
server-id = 1

然后需要增加想要同步的数据库名:

例如:

代码语言:javascript
代码运行次数:0
复制
[mysqld]

server-id = 1
binlog_do_db  = database_name

然后我们可以重启mysql了。

代码语言:javascript
代码运行次数:0
复制
# Windows使用net stop mysql80和net start mysql80
sudo systemctl restart mysql

这时候通过mysql命令查看:

代码语言:javascript
代码运行次数:0
复制
mysql > SHOW MASTER STATUS;

Output
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      157 | db_name      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

随着mysql重启,mysql-bin.尾数也会增加。

创建复制用户

代码语言:javascript
代码运行次数:0
复制
CREATE USER 'replica_user'@'replica_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

这里需要注意,我们默认新增用户其实是用caching_sha2_password的模式连接,这需要SSL。所以我们改为用mysql_native_password的模式。你可以通过以下方式查询到用户连接模式:

代码语言:javascript
代码运行次数:0
复制
select host, user, plugin from mysql.user

然后再

代码语言:javascript
代码运行次数:0
复制
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'replica_server_ip';
FLUSH PRIVILEGES;

当然我们也先从mysqldump备份好SQL, 如果本身服务没在使用,就不用锁数据了。

设置从节点

代码语言:javascript
代码运行次数:0
复制
[mysqld]

server-id = 2
binlog_do_db  = database_name
relay-log   = /var/log/mysql/mysql-relay-bin.log
# (Windows)relay-log = relay-bin.log [默认保存在C:\ProgramData\MySQL\Data]

配置完以上,即可重启服务。 然后在mysql内填写我们从SHOW MASTER STATUS得到的数值:

代码语言:javascript
代码运行次数:0
复制
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source_server_ip',
SOURCE_USER='replica_user',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=157;

之后,在从节点启用复制

代码语言:javascript
代码运行次数:0
复制
START REPLICA;
SHOW REPLICA STATUS\G;

这时候可以在主节点测试是否成功。插入新数据,再去从节点查看是否有这个数据即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置主节点
    • 创建复制用户
  • 设置从节点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档