mysql主从重新同步教程

一.从库MySQL运行停止同步:

STOP SLAVE;

二.新建脚本mysql_backup_with_gtid.sh 

宝塔计划 

运行 

/bin/bash mysql_backup_with_gtid.sh

mysql_backup_with_gtid.sh:

#!/bin/bash

# ================== 配置区 ==================
DB_USER="root"                   # 数据库用户名
DB_PASS="密码"          # 数据库密码
DB_NAME="www_xxx_net"       # 要备份的数据库名
BACKUP_DIR="/www/backup/mysql"   # 备份文件存放目录
# ========================================

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

DATE=$(date +%Y%m%d_%H%M%S)
SQL_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
ZIP_FILE="$SQL_FILE.zip"

echo "开始备份数据库: $DB_NAME"

# 执行备份
mysqldump -u$DB_USER -p$DB_PASS \
    --single-transaction \
    --set-gtid-purged=ON \
    --routines \
    --triggers \
    --events \
    $DB_NAME > $SQL_FILE

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "备份成功: $SQL_FILE"
    
    # 压缩 SQL 文件为 .zip
    echo "正在压缩: $ZIP_FILE"
    zip -j $ZIP_FILE $SQL_FILE
    
    if [ $? -eq 0 ]; then
        echo "压缩成功: $ZIP_FILE"
        # 删除原始 .sql 文件(可选,如需保留可注释下一行)
        rm -f $SQL_FILE
        echo "已删除原始 SQL 文件: $SQL_FILE"
    else
        echo "压缩失败,保留原始 SQL 文件"
        exit 1
    fi
else
    echo "备份失败, 请检查错误信息"
    exit 1
fi

# 可选: 自动删除 7 天前的备份文件(同时匹配 .sql 和 .sql.zip)
find $BACKUP_DIR -name "${DB_NAME}_*.sql*" -type f -mtime +7 -exec rm {} \;

三.传送文件到从库的目录/www/backup/database/:

scp /www/backup/mysql/www_xxx_net_20260522_065306.sql.zip root@从库IP:/www/backup/database/

四.导入数据

    1.从库准备:清空旧数据,重置复制状态

-- 先停掉复制
STOP SLAVE;
RESET SLAVE ALL;
        
-- 删除旧数据库(确保干净导入)
DROP DATABASE IF EXISTS www_xxx_net;
        
-- 彻底清空本地的 GTID 执行记录
RESET MASTER;

        

    2. 重新创建库并导入(这次一定成功)

{
  echo "SET SESSION SQL_LOG_BIN=0;"
  echo "CREATE DATABASE IF NOT EXISTS www_xxx_net;"
  echo "USE www_xxx_net;"
  cat /www/backup/database/www_xxx_net_20260522_065306.sql
} | mysql -uroot -ph数据库密码

    

    3. 重建主从关系,启动复制

CHANGE MASTER TO
  MASTER_HOST = '主库IP',
  MASTER_USER = '从库用户.xxx_slave',
  MASTER_PASSWORD = '密码',
  MASTER_PORT = 3306,
  MASTER_AUTO_POSITION = 1;

START SLAVE;
SHOW SLAVE STATUS\G

    4.如果链接失败:

    主库查询:

SELECT user, host FROM mysql.user WHERE user = '从库用户.xxx_slave';

    

    主库修改密码

ALTER USER '从库用户.xxx_slave'@'从库IP' IDENTIFIED BY '密码'; 
FLUSH PRIVILEGES; 

修改完毕 从库停止

STOP SLAVE;

 重启主从:

START SLAVE;

检查状态

SHOW SLAVE STATUS\G