mysql备份和恢复
2015-06-02 16:34
686 查看
一、备份准备工作
1.查看服务器状态
第一张t1表,使用的是MyISAM引擎,其中有1亿多行数据,第二张t2表,使用的是INNODB引擎,其中有2千多万行数据!
1.策略一:直接拷贝数据库文件(文件系统备份工具 cp)(适合小型数据库)
(1).标准流程:锁表->刷新表到磁盘->拷贝文件->解锁(注,若有有可能的话,可以先停止数据库,再用cp命令准备,这样备份的数据最可靠)
(2).具体步骤:
a.打开第一个终端,
直接删除数据目录中的所有文件
a.mysql这时是无法停止的
(5).总结cp命令,对其进行的备份,速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差,适合小型数据库备份!2.策略二:mysqldump备份数据库(完全备份+增加备份,速度相对较慢,适合中小型数据库)(MyISAM是温备份,InnoDB是热备份)
(1).mysqldump命令详解
a.查看备份前的binlog日志
本文出自 “ly36843运维” 博客,请务必保留此出处http://ly36843.blog.51cto.com/3120113/1657567
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 test5.准备一个test库,里面有两张表,t1表和t2表!
第一张t1表,使用的是MyISAM引擎,其中有1亿多行数据,第二张t2表,使用的是INNODB引擎,其中有2千多万行数据!
mysql> create table t1 (id int(10) default null)engine=myisam default charset=utf8; 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 mysqldc.初始化mysql
[root@nagios-client data]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/ --user=mysqld.复制完全备份的数据文件到数据目录中
[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.sqlc.查看备份是否成功
[root@nagios-client ~]# ll -h /root/ |grep full -rw-r--r-- 1 root root 1.5G Jun 3 09:35 full.sqld.查看新生成的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: 0f.再次查看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 /rooti.模拟数据库损坏
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.sqla.查看还原结果
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) #从这里能看到数据已恢复
本文出自 “ly36843运维” 博客,请务必保留此出处http://ly36843.blog.51cto.com/3120113/1657567
相关文章推荐
- 【解决】Mysql字符集问题
- Mysql用户权限管理
- mysql函数二
- mac在命令行使用mysql
- MySQL中SELECT+UPDATE处理并发更新问题解决方案分享
- 编译安装或者mysql启动时遇到的错误小记
- mysql主从切换
- mysql日期查询操作
- Mysql 中view创建
- mysql 5.6 升级5.7
- MySQL utf8mb4 字符集
- mysql主从不一致解决方法
- mysql 的 infobright 数据库的 mediumblob 显示不了数据
- Mac下MySql卸载方法
- mysql清理binlog
- mysql 设置远程连接
- JDBC(MYSQL)初步学习
- mysql 高性能的索引
- MySQL优化的一些经验
- mysql memory 索引