mysql读写分离(基于二进制文件以及docker容器)

#自定义网络,是容器能通信
docker network create --driver bridge --subnet 172.19.0.0/16 mysql_network

#创建挂载目录(目录内配置文件需自己复制进去)
mkdir -p /usr/etc/mysql8.0/mysql-master/conf /usr/etc/mysql8.0/mysql-master/logs /usr/etc/mysql8.0/mysql-master/data /usr/etc/mysql8.0/mysql-master/mysql-files

docker run --network mysql_network --ip 172.20.0.11 -p 13306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -v /usr/etc/mysql8.0/mysql-master/conf:/etc/mysql -v /usr/etc/mysql8.0/mysql-master/logs:/var/log/mysql -v /usr/etc/mysql8.0/mysql-master/data:/var/lib/mysql -v /usr/etc/mysql8.0/mysql-master/mysql-files:/var/lib/mysql-files  mysql

mkdir -p /usr/etc/mysql8.0/mysql-slave/conf /usr/etc/mysql8.0/mysql-slave/logs /usr/etc/mysql8.0/mysql-slave/data /usr/etc/mysql8.0/mysql-slave/mysql-files

docker run --network mysql_network --ip 172.20.0.12 -p 23306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -v /usr/etc/mysql8.0/mysql-slave/conf:/etc/mysql -v /usr/etc/mysql8.0/mysql-slave/logs:/var/log/mysql -v /usr/etc/mysql8.0/mysql-slave/data:/var/lib/mysql -v /usr/etc/mysql8.0/mysql-slave/mysql-files:/var/lib/mysql-files  mysql

#开放端口,还有配置阿里控制台访问规则,以便图形化管理工具或其他客户端能登陆
firewall-cmd --zone=public --add-port=13306/tcp --permanent
firewall-cmd --zone=public --add-port=23306/tcp --permanent

以下涉及set 环境变量均建议卸载my.cnf文件中,否则重启容器后变量会重置

主库mysql控制台

#查看二进制文件是否开启,以及文件名
show variables like 'log_bin%';
#设置server_id,主机为1,从机为2
set global server_id =1;
#查看server_id
show variables like 'server_id';
#下述两个参数为1,InnoDB与事务一起使用的复制设置中获得最大的持久性和一致性
show variables like 'innodb_flush_log_at_trx_commit';
show variables like  'sync_binlog';
#是否开启网络连接
show variables like  'skip_networking';
#创建用于复制的用户,默认使用caching_sha2_password加密
CREATE USER 'salve_repl'@'%' IDENTIFIED BY '123456';
#赋予salve_repl所有库.所有表复制权限
GRANT REPLICATION SLAVE ON *.* TO 'salve_repl'@'%';

#查看用户
select * from mysql.user;
#查看SSL连接配置
#ssl_ca:证书颁发机构(CA)证书文件的路径名。(ssl_capath类似,但指定CA证书文件目录的路径名。)
#ssl_cert:服务器公钥证书文件的路径名。该证书可以发送到客户端,并根据其拥有的CA证书进行身份验证。
#ssl_key:服务器私钥文件的路径名。
show variables like 'ssl_%';

#获取复制二进制文件坐标
#执行FLUSH TABLES WITH READ LOCK语句刷新所有表并阻止写入语句
FLUSH TABLES WITH READ LOCK;
#在源上的另一个会话中,使用该 SHOW MASTER STATUS语句确定当前二进制日志文件的名称和位置
SHOW MASTER STATUS;
#从库配置复制源并启动复制,该复制启动之前的数据必须要锁表之后生成dump文件,使用dump文件导入从库,从库宕机期间主库操作不会复制到从库。
#从库开启复制服务后解锁
unlock tables;

#测试
create database repl_database;
use repl_database;
create table test_tbl(
id int not null,
name varchar(200));
insert into test_tbl values(1,'n1');
insert into test_tbl values(2,'n2');
insert into test_tbl values(3,'n3');
insert into test_tbl values(4,'n4');
insert into test_tbl values(5,'n5');

从服务器MySQL控制台

#查看二进制文件是否开启,以及文件名,默认情况下,所有服务器上都启用二进制日志记录。副本不需要启用二进制日志记录就可以进行复制。但是,副本上的二进制日志记录意味着副本的二进制日志可用于数据备份和崩溃恢复。启用了二进制日志记录的副本也可以用作更复杂的复制拓扑的一部分。例如,您可能要使用此链式设置来设置复制服务器:A -> B -> C
show variables like 'log_bin%';
#设置server_id,主机为1,从机为2
set global server_id =2;
#查看server_id
show variables like 'server_id';
#下述两个参数为1,InnoDB与事务一起使用的复制设置中获得最大的持久性和一致性
show variables like 'innodb_flush_log_at_trx_commit';
show variables like  'sync_binlog';
#是否开启网络连接,默认禁用,允许tcp连接
show variables like  'skip_networking';
#副本更新,默认启用,副本会将从源接收并由副本的SQL线程执行的更新写入从库自己的二进制日志。
#如果需要禁用副本上的二进制日志记录或副本更新日志记录,可以通过指定从库的skip_log_bin 和log_slave_updates=OFF选项来实现。
show variables like 'log_slave_updates';
#没有该参数
#show variables like 'skip_log_bin';
#binlog_do_db 复制的数据库,默认空,全部;要配置则使用多个set 语句配置多个数据库
show variables like 'binlog_do_db';
#binlog_ignore_db 忽略数据库,默认空,不忽略
show variables like 'binlog_ignore_db';

#查看SSL配置,salve_repl用户密码使用caching_sha2_password加密
#要在从库副本上启用加密连接,请使用CHANGE MASTER TO语句。
#您可以在副本的my.cnf文件的[client]部分中为加密连接所需的副本的证书和SSL私钥文件命名,
#或者可以使用CHANGE MASTER TO语句显式指定该信息。https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html,https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html
#要使用选项文件命名副本的证书和密钥文件,请将以下行添加到副本的my.cnf文件的[client]部分,并根据需要更改文件名:
#[client]
#ssl-ca=cacert.pem
#ssl-cert=client-cert.pem
#ssl-key=client-key.pem
#可看到该文件和配置由于是同一个镜像,所以跟主库(源)相同
show variables like '%ssl_%';
#设置源配置,使用CHANGE MASTER TO来指定源配置,并添加MASTER_SSL选项以使用加密进行连接
#ip 为自定义的ip
CHANGE MASTER TO  MASTER_HOST='172.20.0.11', 
MASTER_USER='salve_repl', 
MASTER_PASSWORD='123456', 
MASTER_LOG_FILE='binlog.000004', 
MASTER_LOG_POS=692,
MASTER_SSL=1;

#开启复制
start slave;
#查看状态,Slave_io_running、Slave_SQL_running两个字段必须为YES
SHOW SLAVE STATUS;
#查看复制信息
select * from mysql.slave_master_info;

#测试
show databases;
use repl_database;
select * from test_tbl;
#停止复制
stop slave;

主mysql服务器

从mysql服务器

posted @ 2020-10-16 22:25  复一日  阅读(133)  评论(0编辑  收藏  举报