docker的mysql主从同步配置

运行环境:ubuntu-server:14.04  docker 1.9

安装镜像:sudo docker pull mysql:5.5

一、在本机创建一个文件用来存放mysql的配置文件

我是在/opt/mysql目录下,分别创建 my.cng(主),my-slave.cnf(从)两个配置文件

编写主库配置文件my.cnf:

[mysqld]
log-bin=mysql-bin
server-id=12
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
!includedir /etc/mysql/conf.d/

编写从库配置文件my-slave.cnf:

[mysqld]
log-bin=mysql-bin
server-id=11
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql

#指的是需要同步的数据库
replicate-do-db=test    
!includedir /etc/mysql/conf.d/

注:Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数,避免踩坑.

mysql的主从复制是基于日志的所以需要配置:log-bin=mysql-bin  开启二进制日志

server-id需要在主从环境内唯一。

二、

启动主库容器:sudo docker run -d -e MYSQL_ROOT_PASSWORD=root  -p 192.168.1.112:3307:3306  -v /opt/mysql/my.cnf:/ect/mysql/my.cnf  --name:mysql-main mysql:5.5

启动从库容器:sudo docker run -d -e MYSQL_ROOT_PASSWORD=root -p  192.168.1.112:3308:3306 -v /opt/mysql/my-slave.cnf:/ect/mysql/my.cnf -- name:mysql-slave mysql:5.5


-d:创建后台进程

-e:设定容器的环境变量 这里设置了mysql的root密码

-p(小写):指定本机和容器的端口映射 格式: host:host-port:container-port

-v :本机文件映射 格式 : host-file-path:container-file-path

--name :指定容器别名,docker 内唯一,容器启动后可以用它来重启容器,关闭容器,用容器的id来操作太麻烦,建议使用这个参数

 操作容器的命令:

sudo docker stop [container-id| container-name]

sudo docker restart  [container-id| container-name]

创建容器后,不需要在执行run命令了,再重新执行上面的run 命令会报错,因为 容器名已存在,只需要用restart命令即可,重新启动容器

查看运行中的容器:sudo docker ps 

查看创建的所有容器:sudo docker ps -al

重启或者关闭是忘记容器的名称可以用以上命令来查看

个人的一点理解:容器的image相当于java的类,而container相当于java的实例,再重新创建则会报上面说的错误


三、

本机用native for mysql连接主库和从库查看容器是否启动成功

mysql的在主从同步时,从库是需要一个同步帐号来进行同步的

在主库中创建同步帐号:

GRANT REPLICATION SLAVE,FILE ON *.* TO 'mysync'@'192.168.1.112' IDENTIFIED BY '123456';

mysync:是从库同步时要用到的帐号

192.168.1.112:主库地址

123456:帐号密码

执行:show master status 

docker的mysql主从同步配置_第1张图片

file 是同步需要的文件,position 开始同步的位置


登陆到从库:

执行:

CHANGE MASTER TO 
MASTER_HOST='192.168.1.112',  #主库地址
MASTER_PORT=3307, # 主库端口
MASTER_USER='mysync',  #在主库中创建的帐号
MASTER_PASSWORD='123456, #密码
MASTER_LOG_FILE='mysql-bin.000004', # 对应show master staus 中查看的file
MASTER_LOG_POS=3901; # 对应show master staus 中查看的position 

show slave status;


slave_IO_Running 和 slave_IO_Running 都为yes
slave_IO_state:waiting for master to send event
看到上图的状态则表示配置成功
最后一步开始同步
执行:  start slave;
取消同步stop slave;


最后在主库中插入数据验证主从是否配置成功




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