安装docker部分
坑点
docker拉镜像速度过慢
点击docker图标,点击邮件看到setting,setting界面上点击docker engine,配置如图所示
还有两个备用的镜像地址
"mirror.c.163.com","https://registry.docker-cn.com"
docker exec -it 容器id /bin/bash失败
可以尝试用 docker exec -it 容器id sh (我这样是可以解决的)
mysql数据库主主同步配置
配置过程
首先拉去docker镜像
首先拉取docker镜像,我们这里使用5.7版本的mysql:
docker pull mysql:5.7
然后使用此镜像启动容器,这里需要分别启动主从两个容器
MasterOne(主一):
docker run -p 3339:3306 --name mysqlOne -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
MasterTwo(主二):
docker run -p 3340:3306 --name myTwo -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
配置MasterOne(主一)
通过
docker exec -it 627a2368c865 /bin/bash
或者
docker exec -it 627a2368c865 sh
命令进入到MasterOne容器内部。627a2368c865是容器的id.
cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。使用apt-get install vim命令安装vim
会出现如下问题:
执行apt-get update,然后再次执行apt-get install vim即可成功安装vim。然后我们就可以使用vim编辑my.cnf,在my.cnf中添加
[mysqld]
server_id = 1
log-bin= mysql-bin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=1
auto-increment-increment=2
复制代码
配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mysql-master启动容器。
再次进入MasterOne容器,执行mysql -uroot -p123456进入mysql (前面创建容器时密码设置为123456,用户名默认为root)
//创建一个用户来同步数据
//这里表示创建一个slave同步账号slave,允许访问的IP地址为%,%表示通配符
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
//查看状态,记住File、Position的值,在masterTwo中将用到
show master status;
复制代码
小技巧:
查看容器IP:
docker inspect monemysql | grep IPA
配置MasterTwo
我们使用vim编辑my.cnf,在my.cnf中添加
[mysqld]
server_id = 2
log-bin= mysql-bin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=2
auto-increment-increment=2
复制代码
之后重启mysql服务
再次进入MasterTwo容器中的mysql
//设置主库链接,master_host即为容器IP,master_log_file和master_log_pos即为在mone容器中,通过show master status查出来的值;
change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154,master_port=3306;
//创建一个用户来同步数据
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
//启动同步
start slave ;
//查看状态
show master status;
复制代码
其中master_log_file 以及master_log_pos的值就是前面说的MasterOne数据库中file以及position对应的值,host则是MasterOne容器的ip
再次配置MasterOne
//设置mtwo主库链接,参数详细说明同上
change master to master_host='172.17.0.3',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=443,master_port=3306;
//启动同步
start slave ;
复制代码
其中master_log_file 以及master_log_pos的值是MasterTwo的file以及position对应的值,host172.17.0.3则是MasterTwo容器的ip
配置完成之后,可以验证双主配置是否正确
在MasterOne 以及MasterTwo容器中,查看:
show slave status\G;
当红框两个Running状态都为Yes时,说明双主配置成功了~
验证
接下来请各位可以自行验证了。哈哈哈哈
参考文章