mysql数据库复制功能配置_最详细的mysql数据库主从复制功能配置教程(docker版本)...

NlyAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAPKADAAQAAAABAAAAPAAAAACL3+lcAAAAV0lEQVRoBe3QMQEAAADCoPVP7WkJiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGPjAADh8AAFUUgPVAAAAAElFTkSuQmCC

2020年12月18日 阅读 234 关注

最详细的mysql数据库主从复制功能配置教程(docker版本)

docker安装mysql

# 主服务器

docker run --name master-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30

# 从服务器

docker run --name sub-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30

复制代码

配置主数据库

vi /etc/mysql/my.cnf

复制代码

如果不能使用vi,请参考文章末尾的**【问题答疑】**

编辑主数据库配置文件,在配置文件尾部添加以下代码:

[mysqld]

#设置主服务器的ID

server-id=100

innodb_flush_log_at_trx_commit=2

# 开启binlog日志同步功能

sync_binlog=1

# binlog日志文件名

log-bin=mysql-bin-5

# 这个表示只同步某个库 (如果没有此项,表示同步所有的库)

# binlog-do-db=xxxx

复制代码

重启docker restart master-mysql,并进入主数据库容器,连接mysql

> mysql -u root -p

Enter password:

复制代码

给从数据库设置登录账户及密码

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

复制代码

查看主数据库的状态show master status \G

mysql> show master status \G

*************************** 1. row ***************************

File: mysql-bin-5.000001

Position: 617

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

复制代码

记录这里展示的File和Position字段,从服务器需要使用,我这里的两个字段的值分别是mysql-bin-5.000001、617,顺序不可颠倒,因为数据库的写操作会引起Position的值变化。

配置从数据库

vi /etc/mysql/my.cnf

复制代码

如果不能使用vi,请参考文章末尾的[问题答疑]

编辑主数据库配置文件,在配置文件尾部添加以下代码:

[mysqld]

server-id=200

innodb_flush_log_at_trx_commit=2

sync_binlog=1

log-bin=mysql-bin-6

复制代码

重启docker restart sub-mysql,并进入主数据库容器,连接mysql

> mysql -u root -p

Enter password:

复制代码

设置主从复制的连接信息

mysql> change master to master_host='10.192.32.156', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin-5.000001', master_log_pos= 617, master_connect_retry=30;

复制代码

参数说明:

master_host:宿主机(即真实机器)的ip

master_user:主数据库给从数据库分配的登录账号

master_password:主数据库给从数据库分配的登录密码

master_port:主数据库的端口

master_log_file:主数据库的日志文件,主数据库的写操作导致日志文件容量到达阈值时会变化

master_log_pos:主数据库日志文件中的位置,主数据库的写操作或容器的重启会导致该值变化

master_connect_retry:连接失败时的重连间隔,默认为60秒

查看主从状态show slave status \G,可以看到Slave_IO_Running和Slave_SQL_Running都是NO,因为我们只是对其进行了配置,但是没有开启

mysql> show slave status \G;

*************************** 1. row ***************************

Slave_IO_State: Connecting to master

Master_Host: 10.192.32.156

Master_User: slave

Master_Port: 3306

Connect_Retry: 30

Master_Log_File: mysql-bin-5.000001

Read_Master_Log_Pos: 617

Relay_Log_File: d0678ce118a6-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin-5.000001

Slave_IO_Running: No

Slave_SQL_Running: No

复制代码

开启主从同步功能

在从数据库中进入mysql并开启主从同步功能start slave \G,并重新查看主从同步状态

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Connecting to master

Master_Host: 10.192.32.156

Master_User: slave

Master_Port: 3306

Connect_Retry: 30

Master_Log_File: mysql-bin-5.000001

Read_Master_Log_Pos: 617

Relay_Log_File: d0678ce118a6-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin-5.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

复制代码

至此所有的主从复制功能已经配置完成,来看看效果吧

87c61fe5ce28ebb7e0653794662922e9.gif

问题答疑

1、vi /etc/mysql/my.cnf操作失败

需要先执行,从数据库也是同样

apt-get update

apt-get install vim

复制代码

2、Slave_SQL_Running字段为No

检查主数据库的Position变化了,因为数据库的写操作或容器的重启会造成Position变化

3、Slave_IO_Running一直为连接状态

检查change master to ...;是否配置正确,其中master_host是宿主机(即真实机器的地址,不能用127.0.0.1或者localhost)

更多相关文档,请见:

GitHub仓库【前端橘子君】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值