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;
如需开启远程访问权限,参考。
然后在主数据库,执行show master status;语句,结果如下: 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 statusG;查看主从同步状态。 执行start slave;之前,SlaveIORunning和SlaveSQLRunning都是No,因为我们还没有开启主从复制过程。执行start slave;开启主从复制过程,再次执行show slave statusG;,SlaveIORunning和SlaveSQLRunning都是Yes,说明主从复制已开启。
如果开始主从复制过程后,SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,可以根据show slave statusG;返回的Last_IO_Error提示予以解决。
3.验证
在主库新建一个数据库,检查从库是否存在此数据库。
四、Mysql是如何复制数据的
参开《高性能MySQL》,复制有三个步骤:
- 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被称为二进制日志事件)。
- 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
- 备库读取中继日志中的事件,将其重放到备库数据之上。