乐趣区

关于docker:使用docker完成mysql主从同步集群搭建

docker 形式搭建

主服务器配置

1. 创立并启动 mysql 主服务器

docker run -d -p 3306:3306 -v /home/yuluo/shardingsphere-env/master/conf:/etc/mysql/conf.d -v /home/yuluo/shardingsphere-env/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name yuluo-mysql-master mysql:8.0.29
eg:
docker run -d -p 3306:3306 -v F:\db\mysql\conf:/etc/mysql/conf.d -v F:\db\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql:8.0.29

2. 创立 mysql 主服务器配置文件

my.cnf

[mysqld]
# 服务器惟一 id,默认值 1
server-id=1
# 设置日志格局,默认值 ROW
binlog_format=STATEMENT
# 二进制日志名,默认 binlog
# log-bin=binlog
# 设置须要复制的数据库,默认复制全副数据库
#binlog-do-db=mytestdb
# 设置不须要复制的数据库
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema

3. 测试连贯

# 进入容器:env LANG=C.UTF-8 防止容器中显示中文乱码
docker exec -it mysql-master env LANG=C.UTF-8 /bin/bash
#进入容器内的 mysql 命令行
mysql -uroot -p123456
#批改默认明码校验形式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4. 主节点创立 slave 用户

create user 'lds_slave'@'%';
# 设置明码
alter user 'lds_slave'@'%' identified with mysql_native_password by '123456';
# 授予复制权限
grant replication slave on *.* to 'lds_slave'@'%';
# 刷新权限
flush privileges;

5. 在主机中查问 master 的状态

 记录 File 和 Position 的值
 File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |     1345 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

从服务器配置

1. 启动从服务器

docker run -d -p 3306:3306 -v /home/yuluo/shardingsphere-env/master/conf:/etc/mysql/conf.d -v /home/yuluo/shardingsphere-env/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name yuluo-mysql-master mysql:8.0.29
eg:
docker run -d -p 3307:3306 -v F:\db\mysql_slave\conf:/etc/mysql/conf.d -v F:\db\mysql_slave\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave1 mysql:8.0.29

2. 从服务器配置

[mysqld]
# 服务器惟一 id,每台服务器的 id 必须不同,如果配置其余从机,留神批改 id
server-id=2
# 中继日志名,默认 xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

3. 测试连贯

# 进入容器:env LANG=C.UTF-8 防止容器中显示中文乱码
docker exec -it mysql-slave1 env LANG=C.UTF-8 /bin/bash
#进入容器内的 mysql 命令行
mysql -uroot -p123456
#批改默认明码校验形式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4. 在从机中配置主从关系

change master to master_host='192.168.28.23',master_user='lds_slave',master_password='123456',master_port=3306,master_log_file='binlog.000002',master_log_pos=1345;

5. 启动从机的复制性能

start slave
# 查看状态 (不须要分号)
show slave status\G
slave_io_running

下边两个都是 Yes 搭建胜利
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

从服务器配置 2

1. 创立并启动从服务器 2

docker run -d -p 3306:3306 -v /home/yuluo/shardingsphere-env/master/conf:/etc/mysql/conf.d -v /home/yuluo/shardingsphere-env/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name yuluo-mysql-master mysql:8.0.29
eg:
docker run -d -p 3308:3306 -v F:\db\mysql_slave2\conf:/etc/mysql/conf.d -v F:\db\mysql_slave2\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave2 mysql:8.0.29

2. 配置文件

[mysqld]
# 服务器惟一 id,每台服务器的 id 必须不同,如果配置其余从机,留神批改 id
server-id=3
# 中继日志名,默认 xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

3. 配置主从关系

change master to master_host='192.168.28.23',master_user='lds_slave',master_password='123456',master_port=3306,master_log_file='binlog.000002',master_log_pos=1345;

4. 启动从机的复制性能

start slave
# 查看状态 (不须要分号)
show slave status\G
slave_io_running

下边两个都是 Yes 搭建胜利
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

5. 同步测试

master 中
CREATE DATABASE db_user;

USE db_user;

CREATE TABLE t_user (
 id BIGINT AUTO_INCREMENT,
 uname VARCHAR(30),
 PRIMARY KEY (id)
);

INSERT INTO t_user(uname) VALUES('zhang3');
INSERT INTO t_user(uname) VALUES(@@hostname);
# 在从机中查看 

进行和重置

-- 在从机上执行。性能阐明:进行 I /O 线程和 SQL 线程的操作。stop slave; 

-- 在从机上执行。性能阐明:用于删除 SLAVE 数据库的 relaylog 日志文件,并从新启用新的 relaylog 文件。reset slave;

-- 在主机上执行。性能阐明:删除所有的 binglog 日志文件,并将日志索引文件清空,从新开始所有新的日志文件。-- 用于第一次进行搭建主从库时,进行主库 binlog 初始化工作;reset master;

常见问题谬误解决

-- 在从机进行 slave
stop slave; 

-- 在主机查看 mater 状态
SHOW MASTER STATUS;
-- 在主机刷新日志
FLUSH LOGS;
-- 再次在主机查看 mater 状态(会发现 File 和 Position 产生了变动)SHOW MASTER STATUS;
-- 批改从机连贯主机的 SQL,并从新连贯即可

-- 查看 server_id 
show variables like 'server_id';

-- 如果为 1 查看配置文件是否映射进去

重启容器问题解决
启动 docker 容器后提醒 WARNING: IPv4 forwarding is disabled. Networking will not work.
C:\Users\administrator>mysql -h 192.168.100.201 -P 3306 -u root -p
#批改配置文件:vim /usr/lib/sysctl.d/00-system.conf
#追加
net.ipv4.ip_forward=1
#接着重启网络
systemctl restart network
退出移动版