mysql主从恢复

show slave status\G;

Slave_IO_Running: No或Slave_SQL_Running: NO都可以用这个方法。

bin-log日志目录:/var/lib/mysql/mysql-bin.000014

这个也是数据库保存的目录,一个库一个文件夹

查看日志mysqlbinlog  /home/mysql/binlog/binlog.000003  | more

备份主库

mysqldump -h 127.0.0.1 -u root -p --all-databases --flush-privileges --single-transaction --master-data=1 --flush-logs --triggers --routines --events --hex-blob> allbackup.sql

mysqldump -u root -p --all-databases --flush-privileges --single-transaction --master-data=1 --flush-logs --triggers --routines --events --hex-blob> allbackup.sql

【--master-data=1会在dump出的sql文件中记录Binlog文件和位置。使用--master-data=1参数后sql文件中会出现下面这行:

将mysql.back.sql在从库恢复

mysql.back.sql拷贝到从库所在服务器。scp allbackup.sql [email protected]:/var/lib/mysql/

在从库执行mysql.back.sql。source  /var/lib/mysql/allbackup.sql;

重新设置位点并重启主从

stop slave;

CHANGEMASTERTOMASTER_HOST='master_ip',MASTER_USER='repl',MASTER_PASSWORD='Repl@123',MASTER_LOG_FILE='mysql-bin.xxx', MASTER_LOG_POS=xxxx;

【执行mysql.back.sql中CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000014', MASTER_LOG_POS=154;】

start slave;

MASTER_LOG_FILE MASTER_LOG_POS在mysql.back.sql中有记录vi  mysql.back.sql。

检查主从是否正常

show slave status\G;

【Slave_IO_Running: No时可以先使用下面方法:

在source那边,执行:

flush logs;

show master status;

记下File, Position。

在target端,执行:

CHANGE MASTER TO MASTER_LOG_FILE='testdbbinlog.000008',MASTER_LOG_POS=107;

slave start;

show slave status \G】

show slave status \G;error显示Table'heart_beat.QRTZ_LOCKS'doesn't exist

其实一看提示信息就感觉差不多了,QRTZ_LOCKS是大写,但是数据库中是小写qrtz_locks。

其实就是linux 表名不区分大小写,解决办法。

vi /etc/my.cnf

在 [mysqld] 节中添加:

lower_case_table_names=1

然后重启MySQL:

service mysqld restart(systemctl restart mysqld)

就可以了。

如何判断主从完全同步呢?

首先Master_Log_File和Relay_Master_Log_File所指向的文件必须一致。

其次Relay_Log_Pos和Exec_Master_Log_Pos的为止也要一致才行。

此时,Slave_SQL_Running_State:显示为wait 意思是中继日志的sql语句已经全部执行完毕,我没事作了

你可能感兴趣的:(mysql主从恢复)