总体步骤:
- 拉取mysql镜像
- 配置mysql主从设置
- 挂载mysql主从设置,分别创建主从容器
- 进入容器修改配置
- 测试主从服务器
拉取镜像
docker pull daocloud.io/mysql:5.7
分别在主从服务器拉取镜像
配置mysql主从设置
master服务器创建master文件夹
在my.cnf文件下添加如下设置:
[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=1
slave服务器创建slave文件夹
在my.cnf文件下添加如下设置:
[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=2
创建容器
创建容器进入容器修改配置。
master:
创建data目录
创建start.sh文件:
#!/bin/bash
#
echo "--------start master-mysql ------"
docker run --name master-mysql \
-p 3316:3306 \
-v $(pwd)/my.cnf:/etc/mysql/my.cnf \
-v $(pwd)/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=<password> \
-d daocloud.io/mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_unicode_ci
运行start.sh
slave:
创建data目录
创建start.sh文件:
#!/bin/bash
#
echo "--------start slave-mysql ------"
docker run --name slave-mysql \
-p 3316:3306 \
-v $(pwd)/my.cnf:/etc/mysql/my.cnf \
-v $(pwd)/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=<password> \
-d daocloud.io/mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_unicode_ci
-p 端口映射
-v 挂载
-e, –env=[] Set environment variables # 定义环境变量
运行start.sh
配置master mysql用户:
进入master-mysql容器:
使用 exec命令
docker exec –help
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG…] Run a command in an existing container
-d, –detach=false Detached mode: run command in the background 后台运行命令
-i, –interactive=false Keep STDIN open even if not attached
-t, –tty=false Allocate a pseudo-TTY
docker exec -it master-mysql bash
进入master-mysql容器mysql:
mysql -uroot -p<password>
创建一个用户名为 user 密码为 123456 的用户
所有ip:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'%' IDENTIFIED BY'123456';
指定ip:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'<your ip>' IDENTIFIED BY '123456';
查看mysql-bin和pos值:
mysql>show master status
配置slave mysql用户:
进入slave -mysql容器:
docker exec -it slave-mysql bash
进入slave-mysql容器mysql:
mysql -uroot -p<password>
mysql>change master to
master_host='xxx.xxx.xxx.xxx', //要连接的主服务器的ip
master_user='user', //用户名为user
master_log_file='mysql-bin.000003',//主库记录mysql-bin的值
master_log_pos=720,//主库的pos值
master_port=3316,//master服务器映射的master-mysql容器的端口
master_password='<password>';//之前配置的 user用户密码
最后查看状态:
mysql>show slave status\G
出现这两行说明成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
方法二:
创建容器同时设置配置
例如
创建master-mysql 并创建一个 user 用户:
创建start.sh文件:
#!/bin/bash
#
echo "--------start slave-mysql ------"
docker run --name slave-mysql \
-p 3316:3306 \
-v $(pwd)/my.cnf:/etc/mysql/my.cnf \
-v $(pwd)/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=<password> \
-d daocloud.io/mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_unicode_ci
sleep 12
#进入容器并创建用户
docker exec -d master-mysql mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE ON *.* TO 'user'@'<your ip>' IDENTIFIED BY '123456';"
缺点:没有错误提示。
优点:不需要进入容器配置MySQL等操作。