[MySQL]数据库的备份与还原
数据库汇出/备份
1. 备份单一数据库:
$ mysqldump -u Username -p --opt DatabaseName > Backup.sql
2. 仅备份特定数据库下的资料表:
$ mysqldump -u Username -p --opt DatabaseName Table1 Table2... > Backup.sql
3. 仅汇出资料表结构:
$ mysqldump -u Username -p --opt --no-data DatabaseName > Backup.sql
4. 备份全部的数据库:
$ mysqldump -u Username -p -A --opt > AllBackup.sql
mysql/mysqldump/mysqladmin 与“登入”有关的参数说明:
- -u Username: 用来存取 mysql 资料表的用户名称。此参数可省略,若省略,则表示为目前登入 linux 的用户名称。
- -p: 于执行时再询问密码。
- -pPassword: 用来存取 mysql 资料表的密码,-p 与 Password 的中间不可有空格。
数据库汇入/还原
1. 建立数据库,再从备份档汇入单一数据库:
$ mysqladmin -u Username -p create DatabaseName
$ mysql -u Username -p DatabaseName < Backup.sql
2. 从备份档汇入全部的数据库 (不需先建立数据库):
$ mysql -u Username -p < AllBackup.sql
状况处理:
状况 1.
汇入数据库时出现错误讯息: Unknown collation: 'utf8mb4_unicode_ci' 或 Unknown collation: 'utf8mb4_unicode_520_ci'
说明:
MySQL 于 v5.5.3 版之后才有“utf8mb4”的编码格式。原本 utf8 的最大编码长度为 3bytes,而 utf8mb4 的最大编码长度为 4bytes,因此它比 utf8 可以储存更多的字符。但是以常用的文字来讲,utf8 已经完全足够使用了。若不升级 MySQL Server,则只须将汇入的字符编码格式改为原本的 utf8。
解决方法:
先将备份档中的 utf8mb4 字串替换成 utf8: (以下的三行指令需依照顺序执行)
$ sed -i 's/utf8mb4_unicode_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4/utf8/g' Backup.sql
全部替换完再进行汇入:
$ mysql -u Username -p DatabaseName < Backup.sql
状况 2.
以 mysqldump 汇出数据库时出现错误讯息: Got error: 1044: Access denied for user 'backup'@'localhost' to database 'test' when using LOCK TABLES
说明:
这错误讯息已说明了用来执行 mysqldump 的帐号没有“LOCK TABLES”权限! 通常用 root 帐号汇出数据库不会发生这个问题,因为我们会给 root 所有的权限。然而我们在设定其它帐号时可能会忘了给它设定“LOCK TABLES”权限,而执行 mysqldump 至少需要“SELECT”与“LOCK TABLES”权限才行,最好再加上“SHOW VIEW”、“EVENT”与“TRIGGER”。
解决方法:
重新授予用户权限:
grant SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER on *.* to 'backup'@'localhost' identified by '{Password}';
flush privileges;
状况 3.
从 cpanel 下载的 MySQL 档案格式为 *.gz,可以用 gunzip 解压缩:
$ gunzip Backup.sql.gz
注意: 使用 gunzip 解压缩后,原本的 *.gz 会被删除!!若要保留旧档,须改用下列指令:
$ gunzip -c Backup.sql.gz > Backup.sql
数据库离线备份/还原
MySQL 的数据库放在 /var/lib/mysql 下,以数据库的名称做为目录的名称。直接将 /var/lib/mysql 下的数据库目录用 tar 指令个别压缩起来即可做为备份。要还原再把档案解压缩回去。
要以这种方式执行备份与还原都必须先停止 MySQL 的服务:
$ service mysqld stop
近期回响