mysqldump 备份还原数据库

1、从 MySQL5.7 导出数据库

mysqldump --all-databases --triggers --routines --events --quick --single-transaction --flush-logs --master-data=2 > db.dump

2、在另一台服务器上导入数据库

systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
mysql -u root -p
mysql> SET SQL_LOG_BIN=0;
mysql> ALTER USER root@'localhost' IDENTIFIED BY 'MySQL5.7';
mysql> SET SQL_LOG_BIN=0;
mysql> exit
mysql < db.dump
systemctl restart mysqld

此备份FLUSH TABLES WITH READ LOCK在转储开始时对所有表(使用)获取全局读锁定 。获取此锁定后,将读取二进制日志坐标并释放锁定。如果在FLUSH发出语句时正在运行长更新语句 ,则MySQL服务器可能会停止,直到这些语句完成。之后,转储变为无锁,并且不会干扰对表的读取和写入。如果MySQL服务器收到的更新语句很短(就执行时间而言),即使有很多更新,初始锁定时间也不应该是明显的。

--single-transaction

此选项将事务隔离模式设置为, REPEATABLE READ并START TRANSACTION在转储数据之前将SQL语句发送到服务器。它仅对事务表有用,例如InnoDB,因为它在START TRANSACTION发出时不转储任何应用程序时转储数据库的一致状态 。

使用此选项时,应记住只有 InnoDB表以一致状态转储。例如,使用此选项时转储的任何表MyISAM或 MEMORY表仍可能更改状态。

虽然 --single-transaction转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE。一致读取不会与这些语句隔离,因此在要转储的表上使用它们会导致 mysqldumpSELECT执行该操作 以检索表内容以获取不正确的内容或失败。

该--single-transaction选项与 --lock-tables选项是相互排斥的,因为LOCK TABLES会导致任何挂起的事务隐含提交。

--quick, -q

此选项对于转储大型表非常有用。它强制 mysqldump一次从服务器一行检索一个表的行,而不是检索整个行集并在写出之前在内存中缓冲它。

要转储大表,请将该--single-transaction选项与--quick选项组合 使用 。

注意:数据库版本要一致

转载于:https://blog.51cto.com/linux10000/2169366

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值