拉取MySQL5.7镜像到本地
docker pull mysql:5.7
# 如果你只需跑一个mysql实例,不做主从,那么执行以下命令即可,不用再做后的参考步骤:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 然后用shell或客户端软件通过配置(用户名:root 密码:123456 ip:你的本机ip 端:3306)来登陆即可
复制代码
准备MySQL配置文件
mysql5.7安装的默认配置文件在/etc/mysql/my.cnf,而自定义的配置文件一般放在/etc/mysql/conf.d这个路径下。
现在我们在本地host主机上自定义的某个目录(如/tmp/data/mysql/conf),先创建两个文件master.conf 和slave.conf,分别用于配置主从两个节点。
/tmp/data/mysql/conf/master.conf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
log_bin = log #开启二进制日志,用于从节点的历史复制回放
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
server_id = 1 # 需保证主库和从库的server_id不同,假设主库设为1
replicate-do-db=fileserver # 需要复制的数据库名,需复制多个数据库的话则重复设置这个选项
复制代码/tmp/data/mysql/conf/slave.conf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
log_bin = log #开启二进制日志,用于从节点的历史复制回放
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
server_id = 2 # 需保证主库和从库的server_id不同,假设主库设为1
replicate-do-db=fileserver # 需要复制的数据库名,需复制多个数据库的话则重复设置这个选项
复制代码
Docker分别运行Mysql主/从两个容器
将mysql主节点运行起来
mkdir -p /tmp/data/mysql/datam
docker run -d --name mysql-master -p 13306:3306 -v /tmp/data/mysql/conf/master.conf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /tmp/data/mysql/datam:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
复制代码
运行参数说明:
--name mysql-master 容器的名字设为mysql-master
-p 3306:3306 将host的3306端口映射到容器的3306端口
-v /tmp/data/mysql/conf/master.conf:/etc/mysql/mysql.conf.d/mysqld.cnf master.conf配置文件挂载
-v /tmp/data/mysql/datam:/var/lib/mysql mysql容器内数据挂载到host的/tmp/data/mysql/datam,用于持久化
-e MYSQL_ROOT_PASSWORD=123456 mysql的root登录密码为123456
将mysql从节点运行起来
mkdir -p /tmp/data/mysql/datas
docker run -d --name mysql-slave -p 3307:3306 -v /tmp/data/mysql/conf/slave.conf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /tmp/data/mysql/datas:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
复制代码
运行参数说明:
--name mysql-slave 容器的名字设为mysql-slave
-p 3307:3306 将host的3307端口映射到容器的3306端口
-v /tmp/data/mysql/conf/slave.conf:/etc/mysql/mysql.conf.d/mysqld.cnf slave.conf配置文件挂载
-v /tmp/data/mysql/datas:/var/lib/mysqlmysql容器内数据挂载到host的/tmp/data/mysql/datas,用于持久化
-e MYSQL_ROOT_PASSWORD=123456 mysql的root登录密码为123456
从节点配置
登录从节点mysql
CHANGE MASTER TO MASTER_HOST='192.168.31.120',MASTER_USER='reader',MASTER_PASSWORD='reader',MASTER_LOG_FILE='log.000003',MASTER_LOG_POS=0;
MASTER_HOST 主节点ip
MASTER_USER MASTER_PASSWORD 登录的账号,密码
MASTER_LOG_FILE 要查的日志文件
MASTER_LOG_POS 日志开始位置
start slave;