mysql版本
[root@zxl-nginx ~]# mysql -V mysql Ver 14.14 Distrib 5.6.28, for linux-glibc2.5 (x86_64) using EditLine wrapper
一、mysqldump
mysqldump仅适用于数据集较小场景
用法:mysqldump [options] [db_name [tbl_name ...]] 主要选项解释: --all-databases, -A:备份所有数据库 --databases, -B:要备份的数据库,可以同时备份多个,使用空格分隔 --flush-logs, -F:备份前、请求到锁之后滚动日志,要记录下复制时的二进制日志 --flush-privileges:通知数据库重读授权表 --host=host_name, -h host_name:要备份的数据库的主机名,可以基于网络备份 --lock-all-tables, -x:请求锁定所有表之后再备份,对MyISAM,InnoDB,Aria做温备 --single-transaction:能够对InnoDB存储引擎实现热备 -u usename 备份的用户名 -p password 登陆数据库的密码 --events:备份事件调度器代码 --routines:备份存储过程和存储函数 --triggers:备份触发器 --master-date={0|1|2},0表示不记录,1表示距离为change master 语句,2表示记录为注释的change master语句
二、创建数据库以及表并插入数据
mysql> create database zxl; Query OK, 1 row affected (0.00 sec) mysql> use zxl Database changed mysql> CREATE TABLE `users` ( -> `id` bigint(20) NOT NULL AUTO_INCREMENT, -> `name` varchar(255) DEFAULT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.02 sec)
#这是创建表以及插入数据的示例,来自互联网。。。
#-- ---------------------------- #-- Table structure for users #-- ---------------------------- #DROP TABLE IF EXISTS `users`; #CREATE TABLE `users` ( # `id` bigint(20) NOT NULL AUTO_INCREMENT, # `name` varchar(255) DEFAULT NULL, # PRIMARY KEY (`id`) #) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; # #-- ---------------------------- #-- Records of users #-- ---------------------------- #INSERT INTO `users` VALUES ('1', '小明'); #INSERT INTO `users` VALUES ('2', '小虎'); #INSERT INTO `users` VALUES ('3', '小花'); #INSERT INTO `users` VALUES ('4', '小花'); #INSERT INTO `users` VALUES ('5', '小花'); #INSERT INTO `users` VALUES ('6', '小虎');
插入数据
mysql> INSERT INTO `users` VALUES ('1', '小明'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `users` VALUES ('2', '小虎'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `users` VALUES ('3', '小花'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `users` VALUES ('4', '小花'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `users` VALUES ('5', '小花'); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `users` VALUES ('6', '小虎'); Query OK, 1 row affected (0.00 sec)
查看插入的数据
mysql> select * from users; +----+--------+ | id | name | +----+--------+ | 1 | 小明 | | 2 | 小虎 | | 3 | 小花 | | 4 | 小花 | | 5 | 小花 | | 6 | 小虎 | +----+--------+ 6 rows in set (0.00 sec)
三、备份数据库以及演示如何恢复
[root@zxl-nginx ~] # mysqldump -uroot -p123456 --databases zxl --single-transaction --flush-logs --master-data=2 > /tmp/zxl_users.sql
Warning: Using a password on the command line interface can be insecure.
注:提示warning,因为5.6版本增加安全机制,不允许在命令行中出现密码,具体没研究,可以在my.cnf文件中加入[mysqldump]下加入用户以及密码就不会提示warning了。
备份数据库之后,再次插入新的数据。
mysql> INSERT INTO `users` VALUES ('7', 'bob'); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `users` VALUES ('8', 'tom'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `users` VALUES ('9', 'lili'); Query OK, 1 row affected (0.00 sec)
查看新插入的数据
mysql> select * from users; +----+--------+ | id | name | +----+--------+ | 1 | 小明 | | 2 | 小虎 | | 3 | 小花 | | 4 | 小花 | | 5 | 小花 | | 6 | 小虎 | | 7 | bob | | 8 | tom | | 9 | lili | +----+--------+ 9 rows in set (0.00 sec)
删除数据库zxl
mysql> drop database zxl; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
查看mysqldump备份的sql文件中的pos节点位置以及相应的二进制文件名
二进制文件以及pos节点如下:
#cat zxl.sql |grep MASTER_LOG_FILE -- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000060', MASTER_LOG_POS=120;
使用mysqlbiglog查看二进制文件,删除数据库zxl的at位置是778
[root@zxl-nginx data]# mysqlbinlog master-bin.000060 # at 778 #160120 14:25:42 server id 1 end_log_pos 867 CRC32 0x014503a4 Querythread_id=44exec_time=0error_code=0 SET TIMESTAMP=1453271142/*!*/; drop database zxl
备份二进制日志位置
[root@zxl-nginx ~]# mysqlbinlog --start-position=120 --stop-position=778 /usr/local/mysql/data/master-bin.000060 > /tmp/big_log.sql
注:在给出一种按照时间回复的方法 database可以指定要恢复的数据库 mysqlbinlog mysql-bin.000218 -v --database=settlement --start-datetime='2017-02-28 14:00:01' --stop-datetime='2017-02-28 16:00:01' >26.sql
恢复数据库
[root@zxl-nginx ~]# mysql -uroot -p < /tmp/zxl_users.sql Enter password:
查看恢复的数据库
关闭二进制日志
mysql> set session sql_log_bin=0; Query OK, 0 rows affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | zxl | +--------------------+ 5 rows in set (0.00 sec)
查看恢复的表 mysql> use zxl; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------+ | Tables_in_zxl | +---------------+ | users | +---------------+ 1 row in set (0.00 sec) mysql> select * from users; +----+--------+ | id | name | +----+--------+ | 1 | 小明 | | 2 | 小虎 | | 3 | 小花 | | 4 | 小花 | | 5 | 小花 | | 6 | 小虎 | +----+--------+ 6 rows in set (0.00 sec) 注:后增加的数据没有恢复过来
恢复二进制备份的big-log文件
[root@zxl-nginx ~]# mysql -uroot -p < /tmp/big_log.sql Enter password:
再次查看users表
mysql> select * from users; +----+--------+ | id | name | +----+--------+ | 1 | 小明 | | 2 | 小虎 | | 3 | 小花 | | 4 | 小花 | | 5 | 小花 | | 6 | 小虎 | | 7 | bob | | 8 | tom | | 9 | lili | +----+--------+ 9 rows in set (0.00 sec)
开启big-log
mysql> set session sql_log_bin=1; Query OK, 0 rows affected (0.00 sec)
注:关闭不关闭二进制只要不进行任何写入操作即可不关闭,原因你懂的。
注:在实际恢复时最好编辑my.cnf配置文件,添加如下项:
skip-networking //跳过网络功能来恢复数据
原文地址:http://noodle.blog.51cto.com/2925423/1737998