这是我参与更文挑战的第 24 天,活动详情查看:更文挑战
一名致力于在技术道路上的终身学习者、实践者、分享者,一位忙起来又偶尔偷懒的原创博主,一个偶尔无聊又偶尔幽默的少年。
欢迎各位掘友们微信搜索「杰哥的IT之旅」关注!
原文链接:MySQL | MySQL 数据库系统(四)- 数据库的备份与恢复
大家在日常的工作中,备份数据其实是信息安全管理重要的工作之一。那么,我们在这篇文章中将介绍一下数据库的备份与恢复。MySQL 数据库的备份同时有多种方式。第一:直接打包数据库文件夹/etc/local/mysql/data
,或者我们使用工具来进行备份。
通过mysqldump
命令可以将指定的库、指定的表或全库导出为SQL
脚本。当需要升级MySQL服务器
时,可以将原有的库信息导出,然后直接在升级后的MySQL服务器
中导入。
使用命令mysqldump
导出数据时,默认会直接在终端显示。若要保存到文件,还需要结合>
重定向输出的操作。
mysqldump [选项] 库名 [表名 1] [表名 2] ··· > /备份路径/备份文件名 复制代码
mysqldump [选项] --databases 库名 1 [库名 2] ··· > /备份路径/备份文件名 复制代码
mysqldump [选项] --all-databases > /备份路径/备份文件名 复制代码
常用的选项包括-u
,-p
,分别用于指定数据库用户名
和密码
。
将采用上述语法基本格式 1
,将MySQL
库中的user表
导出为mysql-user.sql
文件,并采用语法基本格式 2
,将整个auth库
导出为auth.sql
文件,两种语法基本格式的所有操作都需要root
用户进行验证。
[root@localhost ~]# mysqldump -u root -p mysql user > mysql-user.sql Enter password: [root@localhost ~]# mysqldump -u root -p --databases auth > auth.sql Enter password: 复制代码
当要备份整个MySQL服务器中的所有库
时,可采用上述语法基本格式 3
,当导出的数据量较大时,可添加选项--opt
来进行优化执行速度。
将创建备份文件all-data.sql
,且其中包括MySQL服务器
中的所有库。
[root@localhost ~]# mysqldump -u root -p --opt --all-databases > all-data.sql Enter password: 复制代码
通过工具mysqldump
导出的SQL
脚本是文本文件,/*···*/
或--
开头的部分表示注释信息。
使用grep
,less
,cat
等工具可查看详细的脚本内容。
将过滤出auth.sql
脚本中的数据库操作语句。
[root@localhost ~]# grep -v "^--" auth.sql | grep -v "^/" | grep -v "^$" CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `auth`; DROP TABLE IF EXISTS `servers`; CREATE TABLE `servers` ( `Server_name` char(64) NOT NULL, `Host` char(64) NOT NULL, `Db` char(64) NOT NULL, `Username` char(64) NOT NULL, `Password` char(64) NOT NULL, `Port` int(4) DEFAULT NULL, `Socket` char(64) DEFAULT NULL, `Wrapper` char(64) NOT NULL, `Owner` char(64) NOT NULL, PRIMARY KEY (`Server_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table'; LOCK TABLES `servers` WRITE; UNLOCK TABLES; DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `user_name` char(16) NOT NULL, `user_passwd` char(48) DEFAULT '', PRIMARY KEY (`user_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; LOCK TABLES `users` WRITE; INSERT INTO `users` VALUES ('jacktian','*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC'); UNLOCK TABLES; 复制代码
在恢复时,可通过命令mysql
对其进行导入。
mysql [选项] [库名] [表名] < /备份路径/备份文件名 复制代码
当备份文件中只包含表的备份,不包含库的语句时,则需要在导入时必须指定库名,且目标库必须存在。
可以从备份文件mysql-user.sql
中将表导入test
库。
[root@localhost ~]# mysql -u root -p test < mysql-user.sql Enter password: [root@localhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.5.22-log Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test; ## 验证导入结果 Database changed mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | user | +----------------+ 1 row in set (0.00 sec) mysql> 复制代码
若备份文件中已经包括了完整的库信息,则执行导入操作时无须指定库名,可以从备份文件auth.sql
恢复auth
库。
[root@localhost ~]# cd /usr/local/mysql/data/ [root@localhost data]# ls auth ib_logfile0 localhost.err mongodb mysql-bin.000001 mysql-bin.000003 mysql-bin.index performance_schema ibdata1 ib_logfile1 localhost.pid mysql mysql-bin.000002 mysql-bin.000004 mysql.error.log test [root@localhost data]# mv auth /tmp/ ## 移动 auth 库,进行模拟故障操作。 [root@localhost data]# ls -ld auth ls: 无法访问auth: 没有那个文件或目录 [root@localhost data]# mysql -u root -p < ~/auth.sql ## 执行导入恢复操作。 Enter password: ERROR 1050 (42S01) at line 63: Table '`auth`.`users`' already exists [root@localhost data]# ls -ld auth ## 确认恢复后的结果。 drwx------. 2 mysql mysql 4096 8月 1 05:17 auth [root@localhost data]# 复制代码
手把手教你在 Linux 环境下部署 MySQL 数据库!
MySQL | MySQL 数据库系统(二)- SQL语句的基本操作
MySQL | MySQL 数据库系统(三)- 数据库的用户授权
原创不易,如果你觉得这篇文章对你有点用的话,麻烦你为本文点个赞、评论或转发一下,因为这将是我输出更多优质文章的动力,感谢!
对了,掘友们记得给我点个免费的关注哟!防止你迷路下次就找不到我了。
我们下期再见!