高级Mysql 【docker 搭建mysql主从】

2019年2月7日 作者 jacky

环境

  • docker

下载mysql镜像

$ docker pull mysql:8.0

创建Mysql集群配置文件

首先的目录是这样的

创建master和slave配置文件,文件内容如下

master

[mysqld]
server-id=1
log-bin=mysql-bin

slave

[mysqld]
server-id=2
log-bin=mysql-bin

docker环境搭建

docker创建mysql专属网络

$ docker network create --driver bridge --subnet 172.25.0.0/16 mysql_net

创建mysql容器

$ docker create --privileged=true --name mysql-master -v /Users/jacky/data/mysql/data/master:/var/lib/mysql -v /Users/jacky/data/mysql/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --net mysql_net --ip 172.25.0.2 -p 3307:3306 mysql:8.0

$ docker create --privileged=true --name mysql-slave -v /Users/jacky/data/mysql/data/slave:/var/lib/mysql -v /Users/jacky/data/mysql/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --net mysql_net --ip 172.25.0.3 -p 3308:3306 mysql:8.0

启动容器

$ docker start mysql-maste
$ docker start mysql-salve

查询mysql专用的网络环境

设置远程登录密码

进入master和slave容器

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root"; 

Navicat登录一下

验证是否已经配置成功

show variables like '%server_id%';

能够查询对应配置文件中的server_id 说明已经配置成功

mysql > show master status;

能够看到同步的文件,和行数 说明已经配置成功。

注意图中的file和position字段,是下一步slave开启同步的需要指定的参数

设置slave数据库

master_log_file和master_log_pos需要和mater的对应

mysql > change master to master_host='172.25.0.2',master_user='root',master_password='root',master_log_file='mysql-bin.000004',master_port=3306,master_log_pos=437; 

开启同步

启动同步后,再次查看状态

start slave;
show slave status;

当显示Waiting for master to send event说明同步成功

当主库变化时会将同步到备库