设为首页 收藏本站
查看: 592|回复: 0

[经验分享] mysql备份和恢复

[复制链接]

尚未签到

发表于 2018-10-3 11:37:57 | 显示全部楼层 |阅读模式
  一、备份准备工作
  1.查看服务器状态
mysql> \s  
--------------
  
mysql  Ver 14.14 Distrib 5.5.37, for Linux (x86_64) using  EditLine wrapper
  

  
Connection id:5
  
Current database:
  
Current user:root@localhost
  
SSL:Not in use
  
Current pager:stdout
  
Using outfile:''
  
Using delimiter:;
  
Server version:5.5.37 Source distribution
  
Protocol version:10
  
Connection:127.0.0.1 via TCP/IP
  
Server characterset:utf8
  
Db     characterset:utf8
  
Client characterset:utf8
  
Conn.  characterset:utf8
  
TCP port:3306
  
Uptime:45 min 22 sec
  

  
Threads: 1  Questions: 17  Slow queries: 0  Opens: 41  Flush tables: 1  Open tables: 4  Queries per second avg: 0.006
  
--------------
  2.查看数据目录存放位置
mysql> show variables like '%datadir%';  
+---------------+-------------------+
  
| Variable_name | Value             |
  
+---------------+-------------------+
  
| datadir       | /data/mysql/data/ |
  
+---------------+-------------------+
  
1 row in set (0.02 sec)
  3.修改my.cnf
[root@nagios-client ~]# vim /etc/my.cnf  
log-bin=mysql-bin
  
innodb_file_per_table = 1
  重启mysqld服务
[root@nagios-client ~]# service mysqld restart  
Shutting down MySQL. SUCCESS!
  
Starting MySQL.. SUCCESS!
  4.查看新生成的binlog日志
[root@nagios-client ~]# ll /data/mysql/data/  
total 28700
  
-rw-rw---- 1 mysql mysql 18874368 Jun  2 16:30 ibdata1
  
-rw-rw---- 1 mysql mysql  5242880 Jun  2 16:30 ib_logfile0
  
-rw-rw---- 1 mysql mysql  5242880 Jun  2 15:37 ib_logfile1
  
drwx------ 2 mysql root      4096 Jun  2 15:37 mysql
  
-rw-rw---- 1 mysql mysql      107 Jun  2 16:30 mysql-bin.000001
  
-rw-rw---- 1 mysql mysql       19 Jun  2 16:30 mysql-bin.index
  
srwxrwxrwx 1 mysql mysql        0 Jun  2 16:30 mysql.sock
  
-rw-r----- 1 mysql root      3375 Jun  2 16:30 nagios-client.err
  
-rw-rw---- 1 mysql mysql        6 Jun  2 16:30 nagios-client.pid
  
drwx------ 2 mysql mysql     4096 Jun  2 15:37 performance_schema
  
drwx------ 2 mysql root      4096 Jun  2 15:37 test
  5.准备一个test库,里面有两张表,t1表和t2表!
  第一张t1表,使用的是MyISAM引擎,其中有1亿多行数据,第二张t2表,使用的是INNODB引擎,其中有2千多万行数据!
mysql> create table t1 (id int(10) default null)engine=myisam default  
Query OK, 0 rows affected (0.01 sec)    #创建一个简单的t1表,里面只有一个字段 id
  

  
mysql> show create table t1;
  
+-------+--------------------------------------------------------------------------------------+
  
| Table | Create Table                                                                         |
  
+-------+--------------------------------------------------------------------------------------+
  
| t1    | CREATE TABLE `t1` (
  
  `id` int(10) DEFAULT NULL
  
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
  
+-------+--------------------------------------------------------------------------------------+
  
1 row in set (0.00 sec)
  

  
mysql>insert into t1 values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10); #先插入十个数据
  

  
mysql> insert into t1 select * from t1;
  

  
mysql> select count(*) from t1;
  
+-----------+
  
| count(*)  |
  
+-----------+
  
| 335544320 |
  
+-----------+
  
1 row in set (0.04 sec)
  t2表
mysql> create table t2 (id int(10) default null)engine=innodb default charset=utf8;  
Query OK, 0 rows affected (0.14 sec)
  

  
mysql> show create table t2;
  
+-------+--------------------------------------------------------------------------------------+
  
| Table | Create Table                                                                         |
  
+-------+--------------------------------------------------------------------------------------+
  
| t2    | CREATE TABLE `t2` (
  
  `id` int(10) DEFAULT NULL
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  
+-------+--------------------------------------------------------------------------------------+
  
1 row in set (0.02 sec)
  

  
mysql> insert into t2 values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
  二、备份策略具体演示
  1.策略一:直接拷贝数据库文件(文件系统备份工具 cp)(适合小型数据库)
  (1).标准流程:锁表->刷新表到磁盘->拷贝文件->解锁(注,若有有可能的话,可以先停止数据库,再用cp命令准备,这样备份的数据最可靠)
  (2).具体步骤:
  a.打开第一个终端,
mysql> flush tables with read lock;  
Query OK, 0 rows affected (0.06 sec)
  b.打开第二个终端
[root@nagios-client ~]# mkdir /root/alldb.`date +%F-%H-%M-%S`/  #创建备份目录  
[root@nagios-client ~]# cp -rp /data/mysql/data/* /root/alldb.2015-06-02-16-56-27/ #复制所以的数据库文件
  c.在第一个终端解锁
mysql> unlock tables;  
Query OK, 0 rows affected (0.08 sec)
  

  
[root@nagios-client ~]# ll /root/alldb.2015-06-02-16-56-27/    #查看备份好的数据库
  
total 372772
  
-rw-rw---- 1 mysql mysql 371195904 Jun  2 16:52 ibdata1
  
-rw-rw---- 1 mysql mysql   5242880 Jun  2 16:52 ib_logfile0
  
-rw-rw---- 1 mysql mysql   5242880 Jun  2 16:52 ib_logfile1
  
drwx------ 2 mysql root       4096 Jun  2 15:37 mysql
  
-rw-rw---- 1 mysql mysql     11027 Jun  2 16:52 mysql-bin.000001
  
-rw-rw---- 1 mysql mysql        19 Jun  2 16:30 mysql-bin.index
  
srwxrwxrwx 1 mysql mysql         0 Jun  2 16:30 mysql.sock
  
-rw-r----- 1 mysql root       3375 Jun  2 16:30 nagios-client.err
  
-rw-rw---- 1 mysql mysql         6 Jun  2 16:30 nagios-client.pid
  
drwx------ 2 mysql mysql      4096 Jun  2 15:37 performance_schema
  
drwx------ 2 mysql root       4096 Jun  2 16:45 test
  (3).模拟数据库损坏
  直接删除数据目录中的所有文件
[root@nagios-client ~]# cd /data/mysql/data/  
[root@nagios-client data]# ll
  
total 372776
  
-rw-rw---- 1 mysql mysql 371195904 Jun  2 16:52 ibdata1
  
-rw-rw---- 1 mysql mysql   5242880 Jun  2 16:52 ib_logfile0
  
-rw-rw---- 1 mysql mysql   5242880 Jun  2 16:52 ib_logfile1
  
drwx------ 2 mysql root       4096 Jun  2 15:37 mysql
  
-rw-rw---- 1 mysql mysql     11027 Jun  2 16:52 mysql-bin.000001
  
-rw-rw---- 1 mysql mysql        19 Jun  2 16:30 mysql-bin.index
  
srwxrwxrwx 1 mysql mysql         0 Jun  2 16:30 mysql.sock
  
-rw-r----- 1 mysql root       3375 Jun  2 16:30 nagios-client.err
  
-rw-rw---- 1 mysql mysql         6 Jun  2 16:30 nagios-client.pid
  
drwx------ 2 mysql mysql      4096 Jun  2 15:37 performance_schema
  
drwx------ 2 mysql root       4096 Jun  2 16:45 test
  
[root@nagios-client data]# rm -rf *
  (4).具体还原步骤
  a.mysql这时是无法停止的
[root@nagios-client data]# service mysqld stop  
ERROR! MySQL server PID file could not be found!
  b.查找mysql所有进程
[root@nagios-client data]# killall mysqld  c.初始化mysql
[root@nagios-client data]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/ --user=mysql  d.复制完全备份的数据文件到数据目录中
[root@nagios-client data]# cp -r /root/alldb.2015-06-02-16-56-27/ /data/mysql/data/  e.启动mysql数据库
[root@nagios-client data]# service mysqld start  
Starting MySQL.. SUCCESS!
  f.测试并查看数据
mysql> show databases;  
+--------------------+
  
| Database           |
  
+--------------------+
  
| information_schema |
  
| mysql              |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
4 rows in set (0.09 sec)
  

  
mysql> use test;
  
Database changed
  
mysql> show tables;
  
+----------------+
  
| Tables_in_test |
  
+----------------+
  
| t1             |
  
| t2             |
  
+----------------+
  
2 rows in set (0.00 sec)
  

  
mysql> select count(*) from t1;
  
+-----------+
  
| count(*)  |
  
+-----------+
  
| 335544320 |
  
+-----------+
  
1 row in set (0.06 sec)
  

  
mysql> select count(*) from t2;
  
+----------+
  
| count(*) |
  
+----------+
  
| 41943040 |
  
+----------+
  
1 row in set (15.37 sec)
  (5).总结
  cp命令,对其进行的备份,速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差,适合小型数据库备份!
  2.策略二:mysqldump备份数据库(完全备份+增加备份,速度相对较慢,适合中小型数据库)(MyISAM是温备份,InnoDB是热备份)
  (1).mysqldump命令详解
mysqldump --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs > /root/2013-07-22-16-20.full.sql  
--all-tables #备份所有库
  
--lock-all-tables #为所有表加读锁
  
--routinge #存储过程与函数
  
--triggers #触发器
  
--events #记录事件
  
--master-data=2 #在备份文件中记录当前二进制日志的位置,并且为注释的,1是不注释掉在主从复制中才有意义
  
--flush-logs #日志滚动一次
  (2).具体备份过程如下
  a.查看备份前的binlog日志
mysql> show master status;  
+------------------+----------+--------------+------------------+
  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  
+------------------+----------+--------------+------------------+
  
| mysql-bin.000005 |      107 |              |                  |
  
+------------------+----------+--------------+------------------+
  
1 row in set (0.00 sec)
  b.备份所有库(完全备份)
mysqldump -u root -p -h 127.0.0.1 --all-databases --lock-all-tables --master-data=2 --flush-logs >/root/full.sql  c.查看备份是否成功
[root@nagios-client ~]# ll -h /root/ |grep full  
-rw-r--r--   1 root root  1.5G Jun  3 09:35 full.sql
  d.查看新生成的binlog日志
mysql> show master status;  
+------------------+----------+--------------+------------------+
  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  
+------------------+----------+--------------+------------------+
  
| mysql-bin.000006 |      107 |              |                  |
  
+------------------+----------+--------------+------------------+
  
1 row in set (0.00 sec)
  e.插入几条新的数据
mysql> use test;  
Database changed
  
mysql> show tables;
  
+----------------+
  
| Tables_in_test |
  
+----------------+
  
| t1             |
  
| t2             |
  
+----------------+
  
2 rows in set (0.00 sec)
  

  
mysql> insert into t1 values(335544321),(335544322),(335544323);
  
Query OK, 3 rows affected (0.03 sec)
  
Records: 3  Duplicates: 0  Warnings: 0
  f.再次查看binlog日志
mysql> show master status;  
+------------------+----------+--------------+------------------+
  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  
+------------------+----------+--------------+------------------+
  
| mysql-bin.000006 |      363 |              |                  |
  
+------------------+----------+--------------+------------------+
  
1 row in set (0.00 sec)
  g.备份二进制日志(增量备份)
[root@nagios-client ~]# cp /data/mysql/data/mysql-bin.000006 /root  i.模拟数据库损坏
mysql> drop database test;        #这里我们删掉test库  
Query OK, 2 rows affected (0.38 sec)
  (3).具体还原过程如下
#首先通过全备还原test库  
mysql> system ls -l /root |grep full
  
-rw-r--r--   1 root root  1548283305 Jun  3 09:35 full.sql
  
mysql> system pwd
  
/root
  
mysql> source full.sql
  a.查看还原结果
mysql> show databases;  
+--------------------+
  
| Database           |
  
+--------------------+
  
| information_schema |
  
| mysql              |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
4 rows in set (0.08 sec)
  

  
mysql> use test;
  
Database changed
  
mysql> show tables;
  
+----------------+
  
| Tables_in_test |
  
+----------------+
  
| t1             |
  
| t2             |
  
+----------------+
  
2 rows in set (0.00 sec)
  b.查看t1表最后10条数据
mysql> select * from t1 order by id desc limit 10;  
+------+
  
| id   |
  
+------+
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
|   10 |
  
+------+
  
10 rows in set (32.60 sec)
  

  
#从结果能看出,我们后来插入的数据没有了
  c.下面恢复后来插入的数据
#通过之前备份的二进制日志文件还原  
[root@nagios-client ~]# mysqlbinlog /root/mysql-bin.000006 |mysql -u root -p -h 127.0.0.1 test
  
mysql> select * from t1 order by id desc limit 10;
  
+-----------+
  
| id        |
  
+-----------+
  
| 335544323 |
  
| 335544322 |
  
| 335544321 |
  
|        10 |
  
|        10 |
  
|        10 |
  
|        10 |
  
|        10 |
  
|        10 |
  
|        10 |
  
+-----------+
  
10 rows in set (30.39 sec)
  
#从这里能看到数据已恢复



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-609221-1-1.html 上篇帖子: MySQL分区简介 下篇帖子: mysql优化之慢SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表