前言:随着办公自动化和电子商务的飞速发展,企业对信息系统的依赖性愈来愈高,数据库做为信息系统的核心担当着重要的角色。数据库备份,是在数据丢失的状况下,能及时恢复重要数据,防止数据丢失的一种重要手段。一个合理的数据库备份方案,应该可以在数据丢失时,有效地恢复数据,同时须要考虑技术实现难度和有效地利用资源
mysql
备份方式分不少种,从物理与逻辑的角度,备份分为如下几类web
MySQL数据库的备份能够采用两种方式,由于数据库实际上都是文件,直接打包数据库文件夹,或者是使用专用备份工具mysqldump均可以进行备份工做sql
MySQL的数据库文件默认都是保存在安装目录的data文件夹下面,能够直接保存data文件夹,可是占用的空间较大,可使用tar打包压缩进行保存数据库
[root@localhost data]# yum install xz -y //安装xz压缩格式工具 [root@localhost data]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/ 对数据库文件夹进行打包 [root@localhost data]# ls /opt //查看已经生成了备份文件 mysql-2020-01-24.tar.xz rh [root@localhost data]# du -sh /opt/mysql-2020-01-24.tar.xz 676K /opt/mysql-2020-01-24.tar.xz [root@localhost data]# du -sh /usr/local/mysql/data/ 134M /usr/local/mysql/data/ //对比打包先后的文件大小,能够看到压缩的备份文件占用空间很小
[root@localhost data]# tar Jxvf /opt/mysql-2020-01-24.tar.xz /usr/local/mysql/data/ //若是数据库文件损坏数据丢失,能够解压缩备份文件,至关于作了数据恢复
使用mysqldump能够更加灵活地控制备份的内容,好比某几个表或库均可以单独备份服务器
mysqldump -u 用户名 -p[密码][选项][数据库名][数据表名]>/备份路径/备份文件名
mysqldump -u 用户名 -p [密码][选项][数据库名]>/备份路径/备份文件名
mysqldump -u 用户名 -p [密码][选项] --databases 库名1[库名2]...>/备份路径/备份文件名
mysqldump -u 用户名 -p [密码][选项] --all-databases >/备份路径/备份文件名
mysqldump -u 用户名 -p [密码] -d 数据库名 表名 >/备份路径/备份文件名
备份的本质就是保存数据库当前表结构的建立语句和现有数据的插入语句,有了它们能够方便地恢复数据库的状态svg
前面介绍了数据库的彻底备份,使用mysqldump工具能够把数据库的建立语句保存在备份脚本文件中,当数据出现错误时,可使用如下几种方式对它进行恢复操做工具
当须要恢复整库的时候,可使用source命令和mysql命令操作系统
登陆MySQL后,可使用source命令进行整库恢复,命令格式以下日志
source 备份脚本路径
[root@localhost ~]# mysqldump -uroot -p1234 school >/opt/school.sql //先作备份 mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# mysql -uroot -p1234 //进入数据库 Welcome to the MySQL monitor. Commands end with ; or \g. mysql> drop database school; //删除库 Query OK, 1 row affected (0.01 sec) mysql> show databases; //查看school已经删除 +--------------------+ | Database | +--------------------+ | information_schema | | chartest | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> source /opt/school.sql 。。。。省略内容 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | | sys | +--------------------+ 5 rows in set (0.01 sec) mysql>use school; //进入库 Database changed mysql> describe biao; //用describe命令查看表结构 +---------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------+------+-----+---------+-------+ | id | int(4) | NO | PRI | NULL | | | name | char(10) | NO | | NULL | | | address | varchar(50) | YES | | nj | | | score | decimal(10,0) | YES | | NULL | | +---------+---------------+------+-----+---------+-------+ 4 rows in set (0.02 sec) //使用source恢复整库后,库school从新可使用,表里的数据也恢复了
在不登陆MySQL的状况下,可使用mysql命令直接恢复整库code
[root@localhost ~]# mysqldump -uroot -p1234 school >/opt/school.sql //先作备份 mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# mysql -uroot -p1234 //进入数据库 Welcome to the MySQL monitor. Commands end with ; or \g. mysql> drop database school; //删除库 Query OK, 1 row affected (0.01 sec) mysql> show databases; //查看school已经删除 +--------------------+ | Database | +--------------------+ | information_schema | | chartest | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
mysql -u 用户名 -p[密码] <库备份脚本的路径
此时库school已经被删除了,须要先建立再进行恢复操做,不然会报错
[root@localhost ~]# mysql -uroot -p1234 Welcome to the MySQL monitor. Commands end with ; or \g. mysql> create database school; mysql> exit Bye [root@localhost ~]# mysql -uroot -p1234 school< /opt/school.sql [root@localhost ~]# mysql -uroot -p1234 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | //库school恢复成功 | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use school; //进入数据库 Database changed mysql> show tables; +------------------+ | Tables_in_school | +------------------+ | biao | //表也恢复成功 +------------------+ 1 row in set (0.00 sec) mysql> select * from biao; //查询‘biao‘中的全部内容 +----+-------+---------+-------+ | id | name | address | score | +----+-------+---------+-------+ | 1 | stu01 | bj | 87 | | 2 | stu02 | sh | 79 | | 3 | stu03 | nj | 90 | | 4 | stu04 | | 68 | +----+-------+---------+-------+ 4 rows in set (0.00 sec) //结果显示恢复成功
恢复数据表一样可使用source和mysql命令操做
使用scource命令恢复表的操做与恢复库的操做方式相同
[root@localhost ~]# mysqldump -uroot -p1234 school biao > /opt/biao.sql //给表作备份 [root@localhost ~]# mysql -uroot -p1234 mysql> use school; Database changed mysql> show tables; +------------------+ | Tables_in_school | +------------------+ | biao | +------------------+ 1 row in set (0.00 sec) mysql> select * from biao; +----+-------+ | id | name | +----+-------+ | 1 | stu01 | | 2 | stu02 | +----+-------+ 2 rows in set (0.00 sec) mysql> drop table biao; //删除表 Query OK, 0 rows affected (0.04 sec)
mysql> use school; //进入库 Database changed mysql> source /opt/biao.sql //恢复 Query OK, 0 rows affected (0.00 sec) 。。。省略内容 mysql> show tables; +------------------+ | Tables_in_school | +------------------+ | biao | +------------------+ 1 row in set (0.00 sec) mysql> select * from biao; +----+-------+ | id | name | +----+-------+ | 1 | stu01 | | 2 | stu02 | +----+-------+ 2 rows in set (0.01 sec)
使用source命令恢复表后,表里的数据也恢复了,说明恢复是成功的
使用mysql命令恢复表的操做时,当备份文件只包含表的备份,而不包括建立库的语句时,必须指定库名,且目标库必须存在。
[root@localhost ~]# mysqldump -uroot -p1234 school biao > /opt/biao.sql //给表作备份 [root@localhost ~]# mysql -uroot -p1234 mysql> use school; Database changed mysql> show tables; +------------------+ | Tables_in_school | +------------------+ | biao | +------------------+ 1 row in set (0.00 sec) mysql> select * from biao; +----+-------+ | id | name | +----+-------+ | 1 | stu01 | | 2 | stu02 | +----+-------+ 2 rows in set (0.00 sec) mysql> drop table biao; //删除表 Query OK, 0 rows affected (0.04 sec)
不登录MySQL,使用mysql命令恢复表,命令格式以下
mysql -u 用户名 -p [密码] 库名 < 库备份脚本的路径
[root@localhost ~]# mysql -uroot -p1234 school < /opt/biao.sql [root@localhost ~]# mysql -uroot -p1234 Welcome to the MySQL monitor. Commands end with ; or \g. mysql> use school; Database changed mysql> show tables; +------------------+ | Tables_in_school | +------------------+ | biao | +------------------+ 1 row in set (0.00 sec) mysql> select * from biao; +----+-------+ | id | name | +----+-------+ | 1 | stu01 | | 2 | stu02 | +----+-------+ 2 rows in set (0.00 sec)
须要具体指定是哪一个库,使用mysql命令恢复表后,表中的数据也恢复了,说明恢复成功了
MySQL须要按期实施备份,制定合适的备份计划或者策略,并严格遵照。除了进行彻底备份,开启MySQL服务器的日志功能也很重要,彻底备份加上日志,能够对MySQL进行最大化还原
备份文件的名字须要使用统一和易理解的名称,不要使用backup1等这样没有意义的名字,推荐使用库名或者表名加上时间的命名规则,在须要恢复数据库的时候很容易定位到相应的备份文件