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节点如下:
-- 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
恢复数据库
[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 //跳过网络功能来恢复数据
转载于:https://blog.51cto.com/noodle/1737998