docker搭建mysql主从数据库

一、docker安装mysql

参考 在服务器上使用docker安装mysql
在服务器上运行两个MySQL容器,一个作为主,另一个作为从,主写从读。

二、配置my.cnf

1.配置主库

首先进入容器内部,操作如下:

docker exec -it aiden-mysql /bin/bash

然后修改MySQL配置文件,

cd /etc/mysql
vi my.cnf

执行vi命令会报错,需要在docker容器内部自行安装vim,

apt-get update
apt-get install vim

在my.cnf中添加如下配置:

[mysqld]
# 服务的唯一编号
server-id=1
# 开启mysql binlog功能
log-bin=mysql-bin

配置完成之后,需要重启docker容器

docker restart aiden-mysql

2.配置从库

与配置主库一样,配置从库需要在my.cnf文件中添加如下配置:

[mysqld]
# 服务的唯一编号
server-id=2
# 开启mysql binlog功能
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin

配置完成后也需要重启docker容器。

三、链接主库和从库

1.主库操作:

首先需要在主库创建数据同步用户,授予用户 REPLICATION SLAVE和REPLICATION CLIENT权限,用于在主从库之间同步数据。

docker exec -it aiden-mysql /bin/bash
mysql -uroot -p
create user 'slave'@'%' identified by '178-123';
grant replication slave,replication client on *.* to 'slave'@'%';
flush privileges;

如需开启远程访问权限,参考在服务器上使用docker安装mysql。

然后在主数据库,执行show master status;语句,结果如下:
File和Position字段结果
File和Position字段的值后面会用到,在从库操作完成之前,需要保证主库不能做任何操作,否则会引起状态变化。

2.从库操作:

change master to master_host='123.123.0.1',master_user='slave',master_password='178-123',master_post=3306,master_log_file='mysql-bin.000001',master_log_pos=3010,master_connect_retry=30;

命令说明
master_host:主库地址
master_port:主库端口号
master_user:主库用于数据同步的用户
master_password:用于数据同步的用户的密码
master_log_file:指定从库从主库的哪个日志文件开始复制数据,即上图中的File字段的值
master_log_pos:指定从日志文件的哪个位置开始读,即上图中的Position字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认值60秒

在从库终端执行 show slave status\G;查看主从同步状态。
执行start slave;之前,SlaveIORunningSlaveSQLRunning都是No,因为我们还没有开启主从复制过程。执行start slave;开启主从复制过程,再次执行show slave status\G;SlaveIORunningSlaveSQLRunning都是Yes,说明主从复制已开启。

如果开始主从复制过程后,SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,可以根据show slave status\G;返回的Last_IO_Error提示予以解决。

3.验证

在主库新建一个数据库,检查从库是否存在此数据库。

四、Mysql是如何复制数据的

参开《高性能MySQL》,复制有三个步骤:

  1. 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被称为二进制日志事件)。
  2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
  3. 备库读取中继日志中的事件,将其重放到备库数据之上。
    docker搭建mysql主从数据库_第1张图片

你可能感兴趣的:(docker,mysql,数据库)