Mysql主从重建备忘

-- 检查版本
SELECT VERSION();

-- 主库检查复制状态
SHOW MASTER STATUS;

-- 从库检查复制状态
supervisionsSHOW SLAVE STATUS
-- 确保 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes
-- 确认Seconds_Behind_Master=0

SHOW VARIABLES LIKE '%ssl%';

-- 查看处理列表
SHOW PROCESSLIST
SHOW FULL PROCESSLIST;
SHOW VARIABLES LIKE 'log_error';

SELECT THREAD_ID, PROCESSLIST_USER, PROCESSLIST_HOST
FROM performance_schema.threads
WHERE PROCESSLIST_COMMAND = 'Binlog Dump';

SHOW SLAVE HOSTS
SELECT * FROM mysql.user

-- 在主库执行,验证复制账号权限
SHOW GRANTS FOR 'slaveuser'@'%';

-- 查看数据库的用户列表
SELECT * FROM mysql.user;

-- 在主库执行,检查主库binlog是否被清理
SHOW BINARY LOGS;

-- 在主库执行,查看binlog存储的文件路径
SHOW VARIABLES LIKE 'log_bin_basename';

-- 在主库执行,binlog的保留天数
SHOW GLOBAL VARIABLES LIKE 'expire_logs_days';
SHOW GLOBAL VARIABLES LIKE 'binlog_expire_logs_seconds';
SELECT 345600 / 86400

-- 在从库执行,重置IO线程连接
STOP SLAVE;
CHANGE MASTER TO MASTER_CONNECT_RETRY=30; -- 重试间隔秒数
START SLAVE;

SHOW GLOBAL VARIABLES LIKE 'gtid_mode';

-- 存储引擎:确保所有表都使用事务引擎(如InnoDB)。非事务引擎(如MyISAM)会导致GTID不一致。检查非事务表:
SELECT table_schema, table_name
FROM information_schema.tables
WHERE engine NOT IN ('InnoDB', 'NULL') AND table_schema NOT IN ('information_schema','mysql','performance_schema');

-- 2. 配置动态参数 (无需重启)
SET GLOBAL enforce_gtid_consistency = WARN;
SHOW GLOBAL VARIABLES LIKE 'enforce_gtid_consistency'

SHOW GRANTS FOR 'root'@'%';

-- ############################ 同步一个库的方案 #################################

安装必要工具

添加 Percona APT 仓库

wget https://repo.percona.com/apt/percona-release_latest.(lsb_release -sc)_all.deb dpkg -i percona-release_latest.(lsb_release -sc)_all.deb

启用仓库

percona-release enable-only tools release

安装 XtraBackup (选择适合您 MySQL 版本的)

apt update
apt install -y percona-xtrabackup-80 # MySQL 8.0
apt install -y qress

-- ###主库执行
-- 1. 查看复制账号
SELECT * FROM mysql.user;
-- 如果没有,就创建一个,并赋予权限
CREATE USER 'slaveuser'@'%' IDENTIFIED BY '11111111';
GRANT REPLICATION SLAVE ON . TO 'slaveuser'@'%';
FLUSH PRIVILEGES;

-- 1.1 在主库执行,导出表结构
mysqldump -uroot -p --no-data --databases sss > /backup/sss_schema20250711.sql
rsync -avzP /backup/sss_schema.sql root@172.18.66.244:/backup/

-- 2. 导出数据,用xtrabackup,在命令行执行
xtrabackup --backup --user=root --password='11111111' --target-dir=/backup --stream=xbstream --compress --compress-threads=4 --parallel=4 > /backup/b20250710.xbstream
注:xtrabackup是为全实例备份而设计的,全实例备份恢复比较简单,单库备份在异服务器恢复需要导入表空间的方法

-- 3. 传输文件到从库服务器
rsync -avzP /backup/b20250710.xbstream root@172.18.66.244:/backup/

-- ###从库执行
-- 1. 停止MySQL服务
STOP SLAVE;
systemctl stop mysql

-- 2. 准备备份
mkdir -p /restore/sss
xbstream -x -C /restore/b20250710 < /backup/b20250710.xbstream
xtrabackup --decompress --target-dir=/restore/b20250710
xtrabackup --prepare --export --target-dir=/restore/b20250710

-- 3. 先创建空库,把表结构导入
CREATE DATABASE sss /*!40100 COLLATE 'utf8mb4_general_ci' */;
mysql -uroot -p
SOURCE /backup/supervisions_schema.sql

-- 4. 恢复目标数据库,一定要用这个命令,不然分区表是恢复有问题的
xtrabackup --copy-back --parallel=4 --include='^sss[.]' --target-dir=/restore/ssss --datadir=/var/lib/mysql/sss
-- 磁盘空间不够时,可以使用
xtrabackup --move-back --parallel=4 --target-dir=/restore/b20250710 --datadir=/var/lib/mysql
-- 移动数据文件后,要删除不必要的子目录,不然会出现2025-07-09T04:08:34.273030Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Invalid Filename.

-- 5. 设置文件权限
chown -R mysql:mysql /var/lib/mysql
-- chmod 750 /var/lib/mysql/supervisions

-- 6 在MySQL内登记数据库,以及注册表空间(这一步会启动从库),使用脚本文件,批量处理
sh import_tablespace.sh
-- 丢弃旧表空间,导入新的表空间,这一步最容易出错
SELECT CONCAT(
'ALTER TABLE sss.', sss
TABLE_NAME,
' DISCARD TABLESPACE;'
)
FROM information_schema.tables
WHERE table_schema = 'sss';

SELECT CONCAT(
  'ALTER TABLE sss.', 
  TABLE_NAME, 
  ' IMPORT TABLESPACE;'
) 
FROM information_schema.tables 
WHERE table_schema = 'sss';

ALTER TABLE sss.tbl_match_user DISCARD TABLESPACE
ALTER TABLE sss.tbl_match_user IMPORT TABLESPACE

SELECT TABLE_NAME, PARTITION_NAME, PARTITION_EXPRESSION
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_SCHEMA = 'sss';

-- 7. 配置主从复制(从库执行)
systemctl start msyql

STOP SLAVE; -- 如果复制正在运行
RESET SLAVE ALL; -- 清除所有复制信息

change master to master_host='39.108.49.101',master_user='slaveuser',master_password='0000000', MASTER_PORT=3306, ,master_log_file='mysql-bin.001144',MASTER_LOG_POS=156;
change master to master_host='172.18.66.101',master_user='slaveuser',master_password='0000000', MASTER_PORT=3306, master_log_file='mysql-bin.002252',master_log_pos=156;

CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('sss.%');
-- 8. 启动复制并验证
START SLAVE;

-- 9. 检查状态
SHOW SLAVE STATUS
SELECT * FROM performance_schema.replication_applier_status;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。