使用命令行操作MySQL数据库的备份与还原/恢复

原创 小智  2020-11-13 21:03  阅读 2,220 次

无论建站采用的虚拟主机、VPS、还是服务器,甚至有些服务商提供全管理型服务器,为了确保网站数据、项目数据的安全。如何保证在发生数据丢失后能够更快速的恢复数据并管理好网站,就需要定期登录服务器备份数据到本地或者备份服务器。从个人角度考虑,即便商家提供有备份服务、快照备份、甚至全管理,也需要自己手动不定时的备份Linux VPS、服务器中网站文件、MySQL数据库到其他备用机器、或者本地电脑中,这样才能确保安全。

为什么需要备份MySQL数据库?

在网络环境中什么最重要?服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 感觉在网络环境中应该没有什么比数据更为重要。而对于数据库而言,首先要求要拥有一个完整的备份,有了备份才能做很多事,同时也会省了很多事。其次是安全,无论是数据备份的安全还是数据本身或者研发使用中的安全,都值得关注。然后是数据库本身的使用,合情合理的使用。最后对于你所维护的数据库你需要拥有详细的规划,无论是管理角度还是使用角度都需要。

在网络环境中MySQL数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种:

  • 硬件故障
  • 软件故障
  • 自然灾害
  • 黑客攻击、勒索病毒等
  • 误操作 (占比最大。如误删库、删表、删字段等)

备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 可以根据这些数值从而定制符合特定环境中的数据备份策略。

  • 能够容忍丢失多少数据
  • 恢复数据需要多长时间
  • 需要恢复哪一些数据

MySQL数据库使用MySQLdump命令备份数据和使用MySQL命令还原/恢复数据

不管是Oracle数据库还是SQL Server数据库,每个数据库都有自己的一套数据备份和恢复的方法,MySQL数据库也不例外。MySQL数据库备份和恢复用到了两个命令,分别是“mysqldump”和“mysql”,使用“mysqldump”命令进行数据库备份,使用“mysql”命令对数据库进行数据恢复

系统命令行:点击电脑左下角的“开始”按钮——》在“搜索程序和文件”输入框中输入“cmd”,打开系统命令执行程序窗口。直接执行相关的MySQL数据库备份与还原命令语句即可。

MySQL命令行:点击电脑左下角的“开始”按钮——》点击“所有程序”——》MySQL——》MySQL Server 5.5——》MySQL 5.5 Command Line Client,打开“MySQL数据库控制台”窗口---》输入“MySQL数据库的密码”---》直接执行相关的MySQL数据库还原命令语句即可。

使用MySQLdump命令备份数据库

PS:用“系统命令行”使用MySQLdump命令备份数据库

语法一、备份全部数据库的数据和结构

mysqldump -u用户名 -p密码 -A > 保存文件路径

例如:mysqldump -uroot -p123456 -A >D:\data\backup\all.sql

语法二、备份全部数据库的结构(加 -d 参数)

mysqldump -u用户名 -p密码 -A -d > 保存文件路径

例如:mysqldump -uroot -p123456 -A -d >D:\data\backup\all_struct.sql

语法三、备份全部数据库的数据(加 -t 参数)

mysqldump -u用户名 -p密码 -A -t > 保存文件路径

例如:mysqldump -uroot -p123456 -A -t >D:\data\backup\all_data.sql

语法四、备份单个数据库中所有的表结构和数据(数据库名wordpress_1)

mysqldump -u用户名 -p密码 数据库名 > 保存文件路径

mysqldump -h服务器IP -u用户名 -p密码 数据库名 > 保存文件路径

例如:mysqldump -uroot -p123456 wordpress_1 >D:\data\backup\wordpress_1.sql

例如:mysqldump -hlocalhost -uroot -p123456 wordpress_1 > D:\data\backup\wordpress_1.sql

语法五、备份单个数据库中所有表结构;只导出表结构, 不导出表中的数据

mysqldump -u用户名 -p密码 数据库名 -d > 保存文件路径

例如:mysqldump -uroot -p123456 wordpress_1 -d >D:\data\backup\wordpress_1_struct.sql

语法六、备份单个数据库中所有表中的数据;只导出表中的数据,不导出表结构

mysqldump -u用户名 -p密码 数据库名 -t > 保存文件路径

例如:mysqldump -uroot -p123456 wordpress_1 -t >D:\data\backup\wordpress_1_data.sql

语法七、备份多个表的数据和结构(数据,结构的单独备份方法同上)

mysqldump -u用户名 -p密码 数据库名 表1 表2... > 保存文件路径

例如:mysqldump -uroot -p123456 wordpress_1 wp_posts wp_users >D:\data\backup\tables.sql

语法八、备份指定表的结构;只导出表结构, 不导出表中的数据

mysqldump -u用户名 -p密码 -B 数据库名 --tables 表名 -d > 保存文件路径

例如:mysqldump -uroot -p123456 -B db_name --tables name -d >D:\data\backup\name_d.sql

语法九、备份指定表数据;只导出数据,不导出表结构

mysqldump -u用户名 -p密码 -t 数据库名 --tables 表名 > 保存文件路径

例如:mysqldump -uroot -p123456 -t db_name --tables name >D:\data\backup\name_t.sql

语法十、一次性备份指定的多个数据库

mysqldump -u用户名 -p密码 --databases 数据库1 数据库2... > 保存文件路径

例如:mysqldump -uroot -p123456 --databases db1 db2 >D:\data\backup\muldbs.sql

使用MySQL命令还原/恢复数据库

PS:在“MySQL命令行”使用source命令还原/恢复数据库(使用source 命令,需要先登录数据库,在数据库操作界面调用该指令进行还原);在“系统命令行”使用MySQL命令还原/恢复数据库。

语法一、还原全部数据库

(1) MySQL命令行:mysql>source 用于恢复全部数据库的备份文件路径

例如:mysql>source D:\data\backup\all.sql

(2) 系统命令行:mysql -u用户名 -p密码 < 用于恢复全部数据库的备份文件路径

例如:mysql -uroot -p123456 < D:\data\backup\all.sql

语法二、还原单个数据库(需指定数据库)

(1) MySQL命令行:mysql>use 数据库名 ——》mysql>source 用于恢复单个数据库的备份文件路径

例如:mysql>use wordpress_1 ——》mysql>source D:\data\backup\wordpress_1.sql

(2) 系统命令行:mysql -u用户名 -p密码 数据库名 < 用于恢复单个数据库的备份文件路径

例如:mysql -uroot -p123456 wordpress_1 < D:\data\backup\wordpress_1.sql

语法三、还原单个数据库的多个表(需指定数据库)

(1) MySQL命令行:mysql>use 数据库名 ——》mysql>source 用于恢复数据库多个表的备份文件路径

例如:mysql>use wordpress_1 ——》mysql>source D:\data\backup\tables.sql

(2) 系统命令行:mysql -u用户名 -p密码 数据库名 < 用于恢复数据库多个表的备份文件路径

例如:mysql -uroot -p123456 wordpress_1 < D:\data\backup\tables.sql

语法四、还原多个数据库(一个备份文件里有多个数据库的备份,此时不需要指定数据库)

(1) MySQL命令行:mysql>source 用于恢复多个数据库的备份文件路径

例如:mysql>source D:\data\backup\muldbs.sql

(2) 系统命令行:mysql -u用户名 -p密码 < 用于恢复多个数据库的备份文件路径

例如:mysql -uroot -p123456 < D:\data\backup\muldbs.sql

使用MySQLdump命令备份远程数据库到本地电脑

1. 首先在本地创建一个数据库(用来将远程备份的数据库导入到该数据库中)

(1) MySQL命令行:mysql>create database 数据库名;

例如:mysql>create database test; 这里的test和远程的数据库名字一样

(2) 系统命令行:mysql -u用户名 -p密码 ——》 mysql>create database 数据库名; ——》 exit;

例如:mysql -uroot -p123456 ——》 mysql>create database test; ——》 exit;

2. 备份远程数据库到本地电脑中(备份的数据库文件名为testbackup.sql)

系统命令行:mysqldump -h 服务器数据库IP -u用户名 -p密码 数据库名 --default-character-set=utf8mb4 --opt -Q -R --skip-lock-tables > 保存文件路径

mysqldump -h 102.126.101.135 -uroot -p123456 test --default-character-set=utf8mb4 --opt -Q -R --skip-lock-tables > D:\data\backup\testbackup.sql

3. 然后把备份的文件(testbackup.sql)导入到本地数据库中(数据库名:test)

(1) MySQL命令行:mysql>use 数据库名 ——》 mysql>source 用于恢复数据库的备份文件路径

例如:mysql>use test; ——》mysql>source D:\data\backup\testbackup.sql;

(2) 系统命令行:mysql -h服务器IP -u用户名 -p密码 数据库名 < 用于恢复数据库的备份文件路径

例如:mysql -hlocalhost -uroot -p123456 test < D:\data\backup\testbackup.sql

MySQLdump的常用选项
MySQLdump命令选项说明
--host=host_name
-h host_name
从给出的主机名备份,如果没给出,则默认为localhost
--user=user_name
-u user_name
连接MySQL服务器使用的用户名
--password[=password]
-p[password]
连接数据库的密码。如果使用短标签时,在密码与p之间不要有空格,如果你省略了password的值,mysqldump会提示输入。为了安全起见,当然你也可以在选项文件中提供,避免使用时输入。
--port=port_num
-P port_num
制定TCP/IP连接时的端口号
--all-databases
-A
备份所有数据库中的所有表,效果等同于--database 后跟随所有数据库名。
--databases
-B
备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,紧随其后的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名进行备份。在每一个数据库备份前都会添加CREATE DATABASE 与 USE指令
--no-data
-d
只导出表结构,不会在表中记录信息(不创建INSERT语句)。这就在你只想CREATE TABLE时就很有用了(比如,只想备份表结构)
--no-create-info
-t
只导出表中的数据而不需要DDL(数据库定义语句),不创建CREATE TABLE语句。注意:不过此选项不排除mysqldump时会在日志文件中记录文件组与表空间,可是,你可以使用--no-tablespaces来完成。
--no-tablespaces
-y
CREATE LOGFILE GROUP与CREATE TABLESPACE指令不会被写进备份文件。
--tables覆盖 --databases or -B选项,后面所跟参数被视作表名
--quick
-q
快速导出。在备份数据量比较大的表时有用。会将数据读入内存,在输出完成之前会存在内存缓冲区。
--force
-f
即使在备份表出现sql错误时依然继续执行。这个选项的使用场景之一是:在备份时出现错误,因为表已被删除。如果不使用此选项,mysqldump则会存在错误信息。如果使用,则会将错误信息打印出来后继续执行SQL指令。
--xml
-X
导出为xml格式文件
--default-character-set=charset_name使用charset_name作为字符集(如:utf8mb4、gbk等)
--quote-names
-Q
会将逃逸字符进行转义,“‘” '"'会换位'`',如果是ANSI_QUOTES SQL模式支持的话,会转为‘"‘’,此选项默认启动,如果需要关闭,可以使用--skip-quote-names。
--routines
-R
包括存储程序(过程和函数)的倾倒数据库输出。这个选项需要mysql.proc表的SELECT权限。使用,例程生成的输出包含创建过程和创建函数语句创建例程。然而,这些语句不包括属性,如例程创建和修改时间戳,所以当例程.重新加载,创建时间戳等于重新加载时间。如果你需要创建例程和原来的时间戳属性,不使用,例程。相反,转储和重载mysql的内容。proc直接表,使用MySQL账户有合适的MySQL数据库特权。
--opt相当于 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset,它提供了一个快速备份和还原的功能。

使用MySQL数据库管理工具phpMyAdmin导出与导入MySQL数据库的操作方法

如果数据库比较小,可以采用“PHPMyAdmin工具”的方法备份与还原,不过需要注意一个问题。如果我们是需要转移服务器,用PHPMyAdmin导入备份的数据时需要注意备份数据库的版本兼容问题(即:备份数据库时“最大程度兼容数据库系统或旧版本的 MySQL 服务器”中选择“myslq323”兼容模式)。

操作方法:在浏览器中访问http://你的域名/phpMyAdmin/(或“登录主机管理系统,找到【phpMyAdmin】”)——》输入“MySQL数据库的用户名和密码”登陆“PHPMyAdmin工具”操作界面——》选择数据库——》点击“导出”或“导入”按钮。

使用PHPMyAdmin工具导出与导入MySQL数据库

注意事项

1、使用PHPMyAdmin工具还原数据库时,数据库必须已经创建了,否则还原不了(因为备份的sql文件中,不一定备份了数据库创建语句)。

2、数据库备份文件大于2M时,用phpmyadmin没办法还原数据库了,这时可以使用上面的命令行备份/还原数据库。

3、因为MySQL不同的版本导入的数据可能出现问题,因此“最大程度兼容数据库系统或旧版本的 MySQL 服务器”中选择“myslq323”兼容模式可以导出多个版本进行备份,这是以防止你的数据要迁移到别的数据库进行导入时遇到的问题,如果你只是单纯的备份,那么这里可以不需要选择最大程度兼容。

本文地址:http://aszhi.com/server/38.html
关注我们:请关注一下微信号:扫描二维码爱思智前端的微信号
版权声明:本文为原创文章,版权归 小智 所有,欢迎分享本文,转载请保留出处!

发表评论


表情