运行环境: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
file 是同步需要的文件,position 开始同步的位置
登陆到从库:
执行:
最后在主库中插入数据验证主从是否配置成功