搭建主从数据库
前期准备
安装docker for 安装数据库 安装Kitematic for docker的client 安装navicat for 访问数据库
搭建流程
版本
docker (18.03.1-ce-win65 (17513)) mysql images (5.7.20)
搭建主数据库
docker pull mysql:5.7.20
目录C:\Users\ZHANGLE6\Documents\Kitematic\mysql_3306\etc\conf 新建 my.cnf 文件
内容:
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
docker run -p 3306:3306 -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3306/var/lib/mysql:/var/lib/mysql -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3306/etc/conf/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql_3306 -d 7d83a47ab2d2
> docker exec -it {containerId/Name} bash
> mysql -u root -p
> Enter Password : 123456
> grep "log-bin" /etc/mysql/conf.d/my.cnf
> show variables where variable_name like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
> grant replication slave on *.* to 'backup'@'%' identified by '123456';
> show grants for 'backup';
> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 439 | | | |
+------------------+----------+--------------+------------------+-------------------+
搭建从数据库
目录C:\Users\ZHANGLE6\Documents\Kitematic\mysql_3307\etc\conf 新建 my.cnf 文件
内容:
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
docker run -p 3307:3306 -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3307/var/lib/mysql:/var/lib/mysql -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3307/etc/conf/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql_3307 -d 7d83a47ab2d2
> docker exec -it {containerId/Name} bash
> change master to master_host='172.17.0.2', master_user='backup', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 439, master_connect_retry=30;
参数解释:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
start slave
show slave status \G;
重要参数:
Slave_IO_Running : ON (配置好,但是没有启动) /Yes (配置好,并且启动层高)
Slave_SQL_Running : ON (配置好,但是没有启动) /Yes (配置好,并且启动层高)
测试
现在开始,在主表做什么时候都会复制都从表