Mysql备份与还原
一、mysqldump备份
1. mysqldump的三种语法格式
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
示例
mysqldump -uroot -p -h192.168.103.31 -d u_learning_report > u_learning_report.sql
- -u: 用户名
- -p: 密码(回车后输入,避免密码泄漏)
- -h: 数据库地址(不带端口)
- -d:只导出表结构
- u_learning_report:数据库的名称
2. mysqldump常用的options的值
选项名称 | 描述 | 默认值 |
---|---|---|
--add-drop-database | 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句 | false |
--add-drop-table | 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句 | true |
--add-locks | 用 LOCK TABLES 和 UNLOCK TABLES 语句包围每个表转储 | true |
--all-databases | 转储所有数据库中的所有表 | false |
--allow-keywords | 允许创建作为关键字的列名 | false |
--compatible | 生成与其他数据库系统或较旧的 MySQL 服务器更兼容的输出 | (No default value) |
--complete-insert | 使用包含列名的完整 INSERT 语句 | false |
--compress | 压缩客户端和服务器之间发送的所有信息 | false |
--databases | 指定数据库名称 | false |
--default-character-set | 指定默认字符集 | utf8 |
--help | 显示帮助信息 | (No default value) |
--host | MySQL 服务器所在的主机 | localhost |
--insert-ignore | 编写 INSERT IGNORE 而不是 INSERT 语句 | false |
--lock-all-tables | 锁定所有数据库中的所有表 | false |
--lock-tables | 在转储之前锁定所有表 | true |
--no-create-db | 不要写 CREATE DATABASE 语句 | |
--no-data | 不要转储表格内容 | false |
--password | 数据库密码 | |
--port | 端口 | 0 |
--replace | 编写 REPLACE 语句而不是 INSERT 语句 | false |
--skip-add-drop-table | 不要在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句 | |
--skip-add-locks | 不要加锁 | |
--tables | 覆盖 --databases 或 -B 选项 | |
--user | 连接到服务器时使用的 MySQL 用户名 |
连接选项
- --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接 MySQL 服务器的接口。
- --host=host_name, -h host_name
从给定主机上的 MySQL 服务器转储数据。默认主机是localhost.
- --port=port_num, -P port_num
对于 TCP/IP 连接,要使用的端口号。
- --password[=password], -p[password]
用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysqldump会提示输入一个。如果给定,则或 和后面的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。 --password=-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行上提供密码,请使用选项文件。请参见 第 6.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码并且mysqldump不应提示输入密码 ,请使用该 --skip-password 选项。
DDL 选项
- --add-drop-database
DROP DATABASE 在每个CREATE DATABASE语句之前 写一个语句。此选项通常与--all-databasesor --databases选项结合使用, 因为CREATE DATABASE除非指定了这些选项之一,否则不会编写任何语句。
- --add-drop-table
DROP TABLE在每个CREATE TABLE 语句之前 写一个语句。
- --user=user_name, -u user_name
用于连接到服务器的 MySQL 帐户的用户名。
例子
要备份整个数据库:
mysqldump db_name > backup-file.sql
要将转储文件加载回服务器:
mysql db_name < backup-file.sql
mysqldump对于通过将数据从一个 MySQL 服务器复制到另一个来填充数据库也非常有用:
mysqldump --opt db_name | mysql --host=remote_host -C db_name
您可以使用一个命令转储多个数据库:
mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
要转储所有数据库,请使用以下 --all-databases选项:
mysqldump --all-databases > all_databases.sql