mysql完整性备份 还原 及备份注意事项

mysql完全备份操作:案例

mysql数据库的完全备份可以采用多种方式,物理冷备份一般采用tar命令直接打包数据库文件夹(数据目录),而在备份前需要先停库。

直接打包数据库文件夹,源码包的位置/usr/local/mysql/data/,rpm包的位置/var/lib/mariadb/

systemctl start mariadb  //启动mariadb服务

 ls /var/lib/mysql/  //查看一下mysql下内容

 

 

 #mysqladmin -u root password 123456  //给数据库设置一个密码,若有密码就不需要操作这步

mysql -uroot -p000000  //连接mysql

create database auth;   //创建一个auth的数据库

 

 

 use auth  //进入auth数据库里

create table user(name char(10) not null,ID int(48));   //创建表,第一列name长度10位不能为空,第二列ID整数(int)48位

insert into user values('crushlinux','123');   // 插入一个名字为crushlinux,ID位123的数据

select * from user;   //查一下名为user的表

 

 

 systemctl stop mariadb   //退出数据库停止服务

ls /var/lib/mysql/   //查看一下是否有auth

ls /var/lib/mysql/auth/   //查看auth下是否有user

 

 

 yum 0y install xz  //安装xz

 mkdir backup   //建立一个叫backup的目录

tar Jcf backup/mysql_all-$(date +%F).tar.xz /var/lib/mysql/   //(Jcf创建打包压缩的文件包),创建一个叫mysql并带有年月日的压缩包放入backup下

ls backup/  //查看一下backup下的压缩包(备份了整个mysql的目录)

 

 

 模拟数据丢失:

rm -rf /var/lib/mysql/auth/   //删除auth

ls /var/lib/mysql/   //查看,此时缺少一个库

 

 

 systemctl start mariadb  //启动服务

 show databases;   //进入mysql查看所有库,已经没有了删除的那个库

 

 

 mkdir restore   //退出后创建一个文件夹(名字随意)

tar xf backup/mysql_all-2019-10-14.tar.xz -C restore/    //将之前备份的压缩包解压到创建的目录下

cd restore/

ls

cd var/lib/mysql/

 ls

 

 

  mv auth/ /var/lib/mysql/      //将auth移动到/var/lib/mysql/下,重新进入mysql后进行查看,此时auth库已经恢复

 

 

 select * from auth.user;    //查看auth库内容,此时内容也已经恢复

 

 

 使用专用备份工具mysqldump:

mysql自带的备份工具mysqldump,可以很方便的对mysql进行备份。通过命令该工具可以将数据库、数据表或全部的库导出为sql脚本。

便于该命令在不同版本的mysql服务器上使用。例如,当需要升级mysql服务器时,可以先使用mysqldump命令将原有库信息导出,然后直接在升级后的mysql服务器中导入即可。

1.对单个库进行完全备份

格式:mysqldump -u用户名 -p[密码] [选项] --databases [数据库名] > /备份路径/备份文件名

 

示例: mysqldump -uroot -p000000 --databases auth > backup/auth-$(date +%Y%m%d).sql

 

 

 cat backup/auth-20191014.sql    //查看一下备份内容

 

 

 2.对多个库进行完全备份

格式:mysqldump -u用户名 -p [密码] [选项] --databases 库名1 [库名2]… > /备份路径/备份文件名

示例:mysqldump -uroot -p000000 --databases auth > backup/auth-$(date +%Y%m%d).sql

 

 

 过滤一下备份内容

grep -Ev "^/|^$|^-" backup/auth-20191014.sql    //将内容中的以‘/’’ 开头的,空行、‘-’开头的去掉

 

 

3.对所有库进行完全备份

格式:mysqldump -u用户名 -p [密码] [选项] --opt --all-databases > /备份路径/备份文件名

示例:mysqldump -uroot -p000000 --events --opt --all-databases > backup/mysql01_all.$(date +%Y%m%d).sql      //--opt 加快备份速度,当备份数据量大时使用

 

 

 4.对表进行完全备份

格式:mysqldump -u用户名 -p [密码] [选项] 数据库名 表名 > /备份路径/备份文件名

 示例:mysqldump -uroot -p000000 auth user > backup/auth2_user-$(date +%Y%m%d).sql

 

 

 5.对标的结构进行备份【面试题】

格式:mysqldump -u用户名 -p [密码] -d 数据库名 表名 > /备份路径/备份文件名

示例: mysqldump -uroot -p000000 -d mysql user > backup/desc01_mysql_user-$(date +%Y%m%d).sql

 

 

使用mysqldump备份后,恢复数据库

1.source命令:

登录到mysql数据库,执行source备份sql脚本路径

示例:

进入数据库查看所有库

 

 

 drop database auth;  //删除auth库

 

 

 ll backup/auth1-20191014.sql    //查看一下备份的auth库

 

 

 source backup/auth1-20191014.sql   //在mysql中执行source命令

 

 

 show databases;   //再一次查看所有库,此时auth已经恢复

 

 

 select * from auth.user;   //查看auth库,库内数据也已经恢复

 

 

 2.mysql命令

格式一:

mysql -u 用户名 -p[密码] < 库备份脚本路径

示例:

4删除auth库,使其不存在auth,为下面实验做准备

 

 

 mysql -uroot -p000000 < backup/auth1-20191014.sql    //连接并重定向输入到mysql

重新登录mysql,并查看库和库内数据

 

 

 格式二:

mysql -u 用户名 -p[密码] 库名 < 表备份脚本路径

示例:

 

 

MySQL备份思路:  

 

 

 

1、定期实施备份,指定备份计划或策略,并严格遵守

2、除了进行完全备份,开启MySQL服务器的binlog日志功能是很重要的(完全备份加上日志,可以对MySQL进行最大化还原)

3、使用统一和易理解的备份名称,推荐使用库名或者表名加上时间的命名规则,如mysql_user-20181214.sql,不要使用backup1或者abc之类没有意义的名字。

4.定期抽查备份的可靠性,做还原测试或者检查文件大小等方式

5.通过异地或者跨机房等方式来存放备份数据,防止源数据和备份文件一起损坏。

 

posted @ 2019-10-14 20:39  三毛钱呲花  阅读(689)  评论(0编辑  收藏  举报