Centos7 Mysql 5.7 读写分离

1.两台机器,一个主192.168.1.101,一个从192.168.1.102。

先在主机器上创建一个专用的复制用户repl

sql 复制代码
CREATE USER 'repl'@'192.168.1.102' IDENTIFIED BY 'R2026@copy01';

授权

sql 复制代码
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.102';

刷新缓存

sql 复制代码
FLUSH PRIVILEGES;

2.备份主库

指定要同步的数据库

sql 复制代码
mysqldump -uroot -p \
  --single-transaction --set-gtid-purged=ON --master-data=2 \
  --databases mydatabase > mydatabase_$(date +%F).sql

--single-transaction 的核心就是"在不加任何表锁的前提下拿到一致性快照 ",只对 InnoDB 表生效

全库备份

sql 复制代码
mysqldump -uroot -p \
  --single-transaction --master-data=2 \
  --set-gtid-purged=ON --all-databases \
  > all_$(date +%F).sql

从库必须是空实例 (或先 RESET MASTER; RESET SLAVE ALL;)

3.将主库备份好的sql复制到从库服务器上,在从库服务器上执行以下语句进行恢复。

sql 复制代码
mysql -uroot -p < mybase_$(date +%F).sql

恢复完成后。

在从库执行以下语句:

sql 复制代码
CHANGE MASTER TO
  MASTER_HOST='192.168.1.101',
  MASTER_USER='repl',
  MASTER_PASSWORD='R2026@copy01',
   MASTER_AUTO_POSITION=1;

用 MASTER_AUTO_POSITION=1 接主库,从库会自动从"导出快照点"继续拉 binlog.

4.修改两边mysql的配置文件 /etc/my.cnf

主:

sql 复制代码
server_id               = 1
log_bin                 = /pub/data/log/mysql-bin
relay_log               = /pub/data/log/relay-bin
expire_logs_days        = 1
binlog_format           = ROW
binlog_cache_size       = 4M
gtid_mode               = on
enforce_gtid_consistency = 1
log_slave_updates       = 1
log_bin_trust_function_creators = 1
sync_binlog             = 1
innodb_flush_log_at_trx_commit = 1
binlog_checksum         = CRC32
slave_sql_verify_checksum = 1
slave_parallel_workers  = 12
slave_parallel_type     = LOGICAL_CLOCK

从:

sql 复制代码
server_id               = 2
log_bin                 = /pub/data/log/mysql-bin
relay_log               = /pub/data/log/relay-bin
expire_logs_days        = 1
binlog_format           = ROW
binlog_cache_size       = 4M
gtid_mode               = on
enforce_gtid_consistency = 1
log_slave_updates       = 1
log_bin_trust_function_creators = 1
sync_binlog             = 1
innodb_flush_log_at_trx_commit = 1
binlog_checksum         = CRC32
slave_sql_verify_checksum = 1
slave_parallel_workers  = 12
slave_parallel_type     = LOGICAL_CLOCK
read_only               = 1 
replicate-do-db         = mydatabase

用 replicate-do-db = mydatabase 指定要复制的数据库.

改完配置要重启数据库

sql 复制代码
systemctl restart mysqld

查看主节点状态:

sql 复制代码
SHOW MASTER STATUS

从库命令

sql 复制代码
 stop SLAVE;
 START SLAVE;
 SHOW SLAVE STATUS;

观察

都是Yes就是同步成功。

相关推荐
翔云1234561 小时前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql
DevOpenClub1 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
GeW2 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库
在多学一点4 小时前
MYSQL第二次作业
android·数据库·mysql
yeccheng4 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
Risehuxyc4 小时前
Microsoft.Data.Sqlite体验
数据库·sqlite
骑着蜗牛撵大象3274 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
ZENERGY-众壹6 小时前
告警风暴怎么压?100MW 电站监控平台告警引擎架构复盘
数据库·架构·iot·电站监控
zhengfei6117 小时前
Go-fastdfs /reload 未授权访问: 有效PoC
数据库·sql
DevOpenClub7 小时前
高考教育信息问答 API:会话参数、资料引用与流式响应
java·数据库·高考