大型网站怎么加载图片的,网站建设合同书 简易,网站建设改革情况汇报,福州推广营销之前文章我们了解了面试官#xff1a;说一说Binlog是怎么实现的#xff0c;这里我们用Docker搭建主从复制环境。
docker安装主从MySQL
这里我们使用MySQL8.0.32版本#xff1a;
主库配置
master.cnf
//基础配置
[client]
port3306
socket/var/run/mysqld/mysql.sock
[m…之前文章我们了解了面试官说一说Binlog是怎么实现的这里我们用Docker搭建主从复制环境。
docker安装主从MySQL
这里我们使用MySQL8.0.32版本
主库配置
master.cnf
//基础配置
[client]
port3306
socket/var/run/mysqld/mysql.sock
[mysqld]
datadir/var/lib/mysql
socket/var/run/mysqld/mysql.sock //路径需要有mysql用户权限 建议直接在mysql目录
character-set-serverUTF8MB4
sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法//主从配置
server-id1 //id唯一一般采用机器ip后缀
replicate-wild-ignore-tablemysql.* # 忽略表//主库必须从库不必须
log-binmysql-bin //in-log日志路径, 路径相对于 datadir
#binlog_cache_size2M //为每个session 分配的内存如果事务大而且多dml操作也频繁2–4M
log_slave_updates1 //表示slave将复制事件写进自己的二进制日志
binlog_formatmixed //数据混合复制同步
运行容器
这里将数据及配置映射到本地。
docker run -p 4306:3306 --name mysql1 -v /Users/XXX/work/docker/data/mysql/mysql1:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/master.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD123456 --privilegedtrue -d mysql:8.0.32
从库配置
//基础配置
[client]
port3306
socket/var/run/mysqld/mysql.sock
[mysqld]
datadir/var/lib/mysql
socket/var/run/mysql/mysql.sock //路径需要有mysql用户权限 建议直接在mysql目录
character-set-serverUTF8MB4
sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法//主从配置
server-id2 //id唯一一般采用机器ip后缀
replicate-wild-ignore-tablemysql.* //忽略表运行容器
docker run -p 5306:3306 --name mysql2 -v /Users/XXX/work/docker/data/mysql/mysql2:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/slave.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD123456 --privilegedtrue -d mysql:8.0.32
异步复制搭建
异步复制配置 连接主库
mysql -h127.0.0.1 -uroot -p123456 -P4306 主库创建复制用户,这里需要指定密码类型MySQL8默认类型从库无法连接
CREATE USER repl% IDENTIFIED WITH mysql_native_password BY XXXX;
GRANT REPLICATION SLAVE ON *.* TO repl%; 查询主库状态
show master status; 连接从库
mysql -h127.0.0.1 -uroot -p123456 -P5306 设置主库链接。
change master to master_host192.168.1.10,master_userrepl,master_password123456,master_log_filemysql-bin.000003,master_log_pos157,master_port4306;
master_host Master的地址。 由于这里使用docker容器部署采用桥接模式IP需要填写宿主机IPmaster_portMaster的端口号master_user用于数据同步的用户这里填我们新创建的用户主从同步的用户master_password用于同步的用户的密码master_log_file指定 Slave 从哪个日志文件开始复制数据即上面主库中 File 字段的值master_log_pos从哪个 Position 开始读即上面主库 Position 字段的值master_connect_retry如果连接失败重试的时间间隔单位是秒默认是60秒 启动从库同步
start slave; 查看同步状态
show slave status;
下图表示主库已连接成功 测试
主库创建测试数据库test并创建表t1 从库查看数据源已同步过来 表也同步过来 半同步复制搭建
半同步复制是使用额外的插件实现的并非MySQL中内置的因此必须单独安装相应插件之后才能启用。安装插件后可以通过与之关联的系统变量来控制半同步复制的启用或禁用。在安装关联的插件之前与半同步复制相关的系统变量不可用因为这些系统变量是半同步复制插件携带的。
由于半同步复制需要已经配置好异步复制且复制处于可用状态这里我们直接使用上面的异步复制进行。
主库配置 安装semi插件
install plugin rpl\_semi\_sync\_master soname semisync\_master.so; 查看插件状态
show global variables like %semi%; 开启半同步并将主从错误连接超时时间改为3秒。
set global rpl_semi_sync_master_enabled 1;
set global rpl_semi_sync_master_timeout 3000;
改后配置如下 从库配置 设置从库
install plugin rpl_semi_sync_slave soname semisync_slave.so;
set global rpl_semi_sync_slave_enabled 1; 查看从库半同步配置
show global variables like %semi%; 重启同步线程 必须重启从库的I/O线程否则半同步复制不生效。重启I/O线程之后从库会重新连接到主库并注册为半同步的从库如果是全新搭建的复制拓扑可以忽略该步骤。但是半同步复制的配置如果发生在异步复制的配置之后则仍然需要此步骤
stop slave io_thread;
start slave io_thread; 到此半同步复制就配置完成了。