参考 在服务器上使用docker安装mysql
在服务器上运行两个MySQL容器,一个作为主,另一个作为从,主写从读。
首先进入容器内部,操作如下:
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
与配置主库一样,配置从库需要在my.cnf文件中添加如下配置:
[mysqld]
# 服务的唯一编号
server-id=2
# 开启mysql binlog功能
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin
配置完成后也需要重启docker容器。
首先需要在主库创建数据同步用户,授予用户 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字段的值后面会用到,在从库操作完成之前,需要保证主库不能做任何操作,否则会引起状态变化。
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;
之前,SlaveIORunning和SlaveSQLRunning都是No,因为我们还没有开启主从复制过程。执行start slave;
开启主从复制过程,再次执行show slave status\G;
,SlaveIORunning和SlaveSQLRunning都是Yes,说明主从复制已开启。
如果开始主从复制过程后,SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,可以根据show slave status\G;
返回的Last_IO_Error提示予以解决。
在主库新建一个数据库,检查从库是否存在此数据库。
参开《高性能MySQL》,复制有三个步骤: