创建mysql文件目录
mkdir -p /tmp/mysqlData/master/cnf
mkdir -p /tmp/mysqlData/master/data
mkdir -p /tmp/mysqlData/slave/cnf
mkdir -p /tmp/mysqlData/slave/data
编辑主配置文件
vim /tmp/mysqlData/master/cnf/my.cnf
[mysqld]
server-id=1
binlog-ignore-db=mysql
log-bin=mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
编辑子配置文件
vim /tmp/mysqlData/slave/cnf/my.cnf
[mysqld]
server-id=2
binlog-ignore-db=mysql
log-bin=mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=1
拉取mysql5.7的镜像
docker pull mysql:5.7
创建容器
主服务器:
docker run -dt -p 3307:3306 --name master --restart=always -v /tmp/mysqlData/master/cnf:/etc/mysql/conf.d -v /tmp/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
从服务器:
docker run -dt -p 3308:3306 --name slave --link master --restart=always -v /tmp/mysqlData/slave/cnf:/etc/mysql/conf.d -v /tmp/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 指定容器暴露的端口,宿主机(物理机)端口: docker实例端口
-p 3307:3306 把物理机的3307端口映射为实例的端口3306端口
-v 给容器挂载存储卷,挂载到容器的某个目录
-v /tmp/mysqlData/master/cnf:/etc/mysql/conf.d 把创建的配置文件映射成实例的/etc/mysql/conf.d
-v /tmp/mysqlData/master/data:/var/lib/mysql 数据文件的映射
-e 指定环境变量
-e MYSQL_ROOT_PASSWORD=123456 设置MySQL的root账号密码为123456
查看容器状态
docker ps -a
重启master
[root@docker mysqlData]# docker restart master
master
进入master容器,并登录数据库
[root@docker mysqlData]# docker exec -it master bash
root@881e529321df:/# mysql -uroot -p123456
#创建slave数据同步用户
mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
#授权
mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
进入slave容器,进行主从复制配置
mysql> change master to master_host='192.168.86.48' , master_user='slave' , master_password='123456' , master_port=3307 ,master_log_file='mysql-bin.000001' , master_log_pos=154,master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#master_host的IP地址是宿主机的IP地址,可以通过hostname -i查询。
#master_log_file和master_log_pos的内容是刚刚在master数据库中show master status;查询到的。
在slave中查看主从状态
start slave;
show slave status\G;
主从复制测试
master:
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table book(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into book values(1,'English');
Query OK, 1 row affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
slave:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from book;
+------+---------+
| id | name |
+------+---------+
| 1 | English |
+------+---------+
1 row in set (0.00 sec)
至此,说明已配置成功!