文章目录
一、拉取 MySQL5.7 镜像
docker run -d --name mysql:5.7
二、创建数据存放路径、主配置文件
1、创建数据存放路径
mkdir -p /opt/docker-mysql-data/{mysql-master,mysql-slave}
2、创建主配置文件
- Master 的主配置文件
cd /opt/docker-mysql-data
vim my-master.cnf
内容如下:
[mysqld]
user = mysql
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
lc-messages-dir = /usr/share/mysql
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
server-id = 1
log-bin = mysql-bin
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
#bind-address = 127.0.0.1
#log-error = /var/log/mysql/error.log
lower_case_table_names = 1
explicit_defaults_for_timestamp = true
symbolic-links = 0
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
- Slave的主配置文件
直接复制Master的配置文件,只需要修改其中的 “server-id = 1” 为 “server-id = 2” 即可。
cp my-master.cnf my-slave.cnf
vim my-slave.cnf
三、运行容器
1、运行 Master 数据库
docker run -d \
--name mysql-master \
-e MYSQL_ROOT_PASSWORD=111111 \
-v /opt/docker-mysql-data/mysql-master:/var/lib/mysql \
-v /opt/docker-mysql-data/my-master.cnf:/etc/mysql/my.cnf \
-p 3306:3306 \
mysql:5.7
2、运行 Slave 数据库
docker run -d \
--name mysql-slave \
-e MYSQL_ROOT_PASSWORD=111111 \
-v /opt/docker-mysql-data/mysql-slave:/var/lib/mysql \
-v /opt/docker-mysql-data/my-slave.cnf:/etc/mysql/my.cnf \
-p 3307:3306 \
mysql:5.7
3、查看运行中的容器
docker ps
执行结果:
4、查看 Master、Slave 的 IP地址信息
docker inspect mysql-master |grep 'IPAddress'
docker inspect mysql-slave |grep 'IPAddress'
执行结果:
四、配置主从
1、Master 上执行
docker exec -it mysql-master bash # Master上执行
mysql -uroot -p111111 # Master、Slave上都执行
grant replication slave on *.* to 'slave'@'%' identified by 'slave';
flush privileges;
show master status;
执行结果:
2、Slave 上执行
docker exec -it mysql-slave bash
mysql -uroot -p111111
change master to master_host='172.17.0.2', master_user='slave', master_password='slave', master_log_file='mysql-bin.000003', master_log_pos=582, master_port=3306;
start slave;
show slave status \G;
含义: | |
---|---|
master_host=‘172.17.0.2’ | 根据 mysql-master的 IP地址信息得来 |
master_log_file=‘mysql-bin.000003’ | 以自己实际的 Master的状态为准 |
master_log_pos=582 | 以自己实际的 Master的状态为准 |
执行结果:
从上面的结果中,可以看到如下信息,表示主从配置正常。
Slave_IO_Running :Yes
Slave_SQL_Running :Yes
五、测试
1、在Master上创建test数据库
create database test;
2、在Slave上查看test数据库是否已被同步
show databases;