Mysql数据库备份与恢复

183 阅读1分钟

查看是否存在死锁并解除死锁的方法:

(1)查看下在锁的事务 

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 

(2)杀死进程id(就是上面命令的trx_mysql_thread_id列) 

kill 线程ID

只导出表结构不导出数据:

mysqldump -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 --skip-add-drop-table  --no-data --databases db1 > ./iam_nodata$(date +%F).sql
sed -i "s/^USE\s*/-- &/g" ./iam_nodata$(date +%F).sql
sed -i "s/^CREATE DATABASE/-- &/g" ./iam_nodata$(date +%F).sql

--skip-add-drop-table 不删除表

--no-data 不导出表数据

sed命令用于将导出的sql文件中的【CREATE DATABASE 数据库名】和【USE 数据库名】给注释掉,防止导入这个文件时误操作正常使用中的数据库。

备份指定的数据库:

mysqldump -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -F -E -R --triggers --force --master-data=2 --single-transaction --databases test_new > ./iam_$(date +%F).sql

全量备份数据库,适用于所有场景下的备份:

mysql -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -e "show databases" | grep -Ev "Database|information_schema|performance_schema|sys" |\
xargs mysqldump -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -F -E -R --triggers --force --master-data=2 --single-transaction --databases > ./iam_$(date +%F).sql

xargs前面的命令,是为了将information_schema、performance_schema、sys这三个库过滤掉,mysqldump中的参数解释如下:

-F 在执行导出前先执行一下刷新二进制binlog日志文件,

-E 备份事件调度器,

-R 备份存储过程和函数,

--triggers 备份触发器,

--force 遇到错误时继续执行,

--master-data=2 备份时将change master语句注释掉,

--single-transaction 快照备份,即在导出过程对表的更新操作被挂起,

--databases 指定要备份的多个数据库。

清空数据库:

delete_databases=`mysql -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql"`
for db in $delete_databases;do mysql -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -e "drop database $db";done
mysql -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 -e "show databases"

导入全量备份文件:

mysql -S /usr/local/mysql5.7/mysql.sock -uroot -p123456 --force < ./iam_$(date +%F).sql

查看全量备份文件导出时的binlog位置:

head -n 1000 iam_$(date +%F).sql | grep "CHANGE MASTER TO MASTER_LOG_FILE"

先重置主从关系:

STOP SLAVE;
RESET SLAVE ALL;

再恢复主从关系:

CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.002712',
MASTER_LOG_POS=154;
START SLAVE;

查看主从同步状态:

SHOW SLAVE STATUS\G