1 用户权限

grant select,RELOAD,PROCESS,SUPER, REPLICATION CLIENT ON *.* TO 'bak'@'192.168.%' IDENTIFIED BY "**";

2 mysqldump 备份

2.1利用mysqldump进行全备份

--A 全备
/usr/local/mysql/bin/mysqldump -h 127.0.0.1 -usystem -p'***' -A -R -S /data/mysqldata/3306/mysql.sock \
--single-transaction --default-character-set=utf8 --master-data=2 | gzip > /data/mysqldata/backup/mysqldump/mysqldumpfullbk_20170301.sql.gz

--set global general_log=1
查看mysqldump的原理,flush tables with read lock;短暂的一致性,不支持写,支持读,
snapshot,unlock tables,时间很短
--参数--single-transaction --master-data=2 --default-character-set=utf8
--会先对所有数据库的所有表上锁,读取binlog的信息之后就立即释放锁,这个过程是十分短暂的。然后整个导出过程都在一个事务里.
--慢查询会阻塞flush table,ddl也会

--db.table 针对数据和表

/usr/local/mysql/bin/mysqldump -usystem -p -h127.0.0.1 -P3306 test a \
--single-transaction --master-data=2 --default-character-set=utf8 -q \
| gzip > /data/mysqldata/test_a`date +'%Y%m%d'`.sql.gz

--db.tables 多个表
/usr/local/mysql/bin/mysqldump -usystem -p -h127.0.0.1 -P3306 test a b \
--single-transaction --master-data=2 --default-character-set=utf8 -q \
| gzip > /data/mysqldata/test_a`date +'%Y%m%d%H'`.sql.gz

-- dbs 多个库
/usr/local/mysql/bin/mysqldump -usystem -p -h127.0.0.1 -P3306 -B test bi1 \
--single-transaction --master-data=2 --default-character-set=utf8 -q \
| gzip > /data/mysqldata/test_a`date +'%Y%m%d%H%m'`.sql.gz

2.2 全库恢复

[mysql@mysql-5635 mysqldump]$ gunzip mysqldumpfullbk_20170301.sql.gz
[mysql@mysql-5635 mysqldump]$ ll
total 2272
-rw-rw-r-- 1 mysql mysql 2323927 Mar 1 07:21 mysqldumpfullbk_20170301.sql
--全库恢复
[mysql@mysql-5635 mysqldump]$ mysql -usystem -p*** -h127.0.0.1 -P3306 <mysqldumpfullbk_20170301.sql

2.3 增量恢复

在全备份后进行插入数据,然后删除表等操作

mysql> insert into yhq_t1 values(2,'BBBBBB');
Query OK, 1 row affected (0.04 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> truncate table yhq_t1 ;
Query OK, 0 rows affected (0.05 sec)

在上全库恢复后只有1条数据

mysql> select * from yhq_t1 ;
+------+-------+
| id | name |
+------+-------+
| 1 | AAAAA |
+------+-------+

--增量恢复,利用binlog
--可以类似查询

mysql> system ls /data/mysqldata/3306/binlog/
mysql> show binlog events in 'mysql-bin.000011';

mysql> show master status;

[mysql@mysqlhq scripts]$ mysqlbinlog --help #可以根据帮助文档,查询mysqlbinlog支持的参数,常用的 -d,start-datetime,start-position,stop-datetime等

$ mysqlbinlog -d test -vv mysql-bin.000011 >/tmp/mysqlbin07.txt #找到对应的binlog文件

$ mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000011--stop-datetime="2017-08-31 07:19:33" --start-datetime="2017-08-31 07:17:33"  >/tmp/test0732.sql

$ mysql -usystem  -p*** -h127.0.0.1  -P3306  </tmp/test0732.sql

--如果有多个binlog需要恢复,就类似这样,然后在导入

shell> mysqlbinlog binlog.000001 > /tmp/statements.sql
shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql

Point-in-Time (Incremental) Recovery Using the Binary Log
1 Point-in-Time Recovery Using Event Times
为了指示要恢复的开始和结束时间,指定的mysqlbinlog可以--start - datetime和--stop -日期时间选择,在DATETIME格式。
举个例子,假设在2005年4月20日,正是在上午10点的SQL语句被执行的删除一个大表。
要恢复表和数据,你可以恢复前一天晚上的备份,然后执行以下命令
shell> mysqlbinlog --stop-datetime="2005-04-20 9:59:59" \
/var/log/mysql/bin.123456 | mysql -u root -p
这个命令恢复所有的数据直到--stop-datetime指定的时间
如果没有检测已输入直到小时后,错误的SQL语句,你可能还需要恢复之后发生的活动。
shell> mysqlbinlog --start-datetime="2005-04-20 10:01:00" \
/var/log/mysql/bin.123456 | mysql -u root -p
要使用点及时恢复的这种方法,您应检查日志,以确保准确的时间到指定的命令。为了不执行它们显示日志文件的内容,请使用以下命令
shell> mysqlbinlog /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
Then open the /tmp/mysql_restore.sql file with a text editor to examine it.

2 Point-in-Time Recovery Using Event Positions
--start-position and --stop-position
shell> mysqlbinlog --start-datetime="2005-04-20 9:55:00" \
--stop-datetime="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
用文本编辑器打开该文件,寻找你不要想重复的语句。确定二进制日志的位置停止和恢复恢复,
使他们的注释。位置被标记为log_pos后跟一个数字。恢复以前的备份文件后,使用位置编号来处理二进制日志文件。
shell> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
| mysql -u root -p

shell> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
| mysql -u root -p

drop table用mysqldump恢复
drop table恢复测试
1 create table t_d/insert
2 mysqldump -A
3 insert into t_d/drop
--恢复操作
1 mysqldump中恢复到备份时刻
2 根据binlog位置点,恢复到drop的位置点
--test
(system@127.0.0.1:3306) [test]> select * from t_d;
+---+
| a |
+---+
| 1 |
| 2 |
| 4 |
| 5 |
mysqldump
insert into t_d values (6),(7),(8);
(system@127.0.0.1:3306) [test]> select * from t_d;
+---+
| a |
+---+
| 1 |
| 2 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
drop table t_d

mysql mysql 101305262 Oct 31 01:05 allDatabase_20171031.sql.gz
$ gunzip allDatabase_20171031.sql.gz
$ head -50 allDatabase_20171031.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000078', MASTER_LOG_POS=154;

[mysql@mysql1 logical]$ sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t_d`/!d;q' allDatabase_20171031.sql

ROP TABLE IF EXISTS `t_d`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_d` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
[mysql@mysql1 logical]$ grep 'INSERT INTO `t_d`' allDatabase_20171031.sql>t_d_bak20171031.sql
[mysql@mysql1 logical]$ cat t_d_bak20171031.sql
INSERT INTO `t_d` VALUES (1),(2),(4),(5);

(system@127.0.0.1:3306) [test]> select * from t_d;
+---+
| a |
+---+
| 1 |
| 2 |
| 4 |
| 5 |
+---+

[mysql@mysql1 binlog]$ mysqlbinlog -v -v --base64-output=DECODE-ROWS --set-charset=UTF8 --start-position=154 /data/mysqldata/3306/binlog/mysql-bin.000078 |grep DROP -A10 -B10
# at 1630230
#171031 2:10:32 server id 20170814 end_log_pos 1630261 CRC32 0xdf5c044f Xid = 6032638
COMMIT/*!*/;
# at 1630261
#171031 2:10:31 server id 20170814 end_log_pos 1630326 CRC32 0xbe0887b7 Anonymous_GTID last_committed=4148 sequence_number=4149
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1630326
#171031 2:10:31 server id 20170814 end_log_pos 1630442 CRC32 0x91db776e Query thread_id=635196 exec_time=1 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1509387031/*!*/;
DROP TABLE `t_d` /* generated by server */
/*!*/;
# at 1630442
#171031 2:10:33 server id 20170814 end_log_pos 1630507 CRC32 0x84362a1f Anonymous_GTID last_committed=4149 sequence_number=4150
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1630507
#171031 2:10:33 server id 20170814 end_log_pos 1630581 CRC32 0x9ba1d726 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1509387033/*!*/;
BEGIN
/*!*/;
# at 1630581
--删除事件1630442,我们要恢复到这个之前,也就是1630326这个事件
[mysql@mysql1 binlog]$ mysqlbinlog -v -v --base64-output=DECODE-ROWS --set-charset=UTF8 --start-position=154 --stop-position=1630326 \
/data/mysqldata/3306/binlog/mysql-bin.000078 > db_test_t_d20171031.sql

-----
'/*!*/;
### INSERT INTO `test`.`t_d`
### SET
### @1=6 /* INT meta=0 nullable=0 is_null=0 */
### INSERT INTO `test`.`t_d`
### SET
### @1=7 /* INT meta=0 nullable=0 is_null=0 */
### INSERT INTO `test`.`t_d`
### SET
### @1=8 /* INT meta=0 nullable=0 is_null=0 */
# at 1619713
#171031 2:10:03 server id 20170814 end_log_pos 1619744 CRC32 0xc7b1762a Xid = 6032401
COMMIT/*!*/;

3 mysqldump 日志

-----------
show master status;
show variables like 'general_log';
show variables like 'log_output';
show variables like 'general_log_file';
set global general_log=on;
set global log_output='table';
set global log_output='file';
show create table mysql.general_log;
select command_type,argument from mysql.general_log order by event_time desc;
delete from mysql.general_log;
set global general_log=off;
-----------
2017-09-28T22:42:26.099799Z 357112 Query show variables like 'general_log_file'
2017-09-28T22:42:56.854552Z 370024 Connect system@127.0.0.1 on using TCP/IP
2017-09-28T22:42:56.855764Z 370024 Query /*!40100 SET @@SQL_MODE='' */
2017-09-28T22:42:56.856766Z 370024 Query /*!40103 SET TIME_ZONE='+00:00' */
2017-09-28T22:42:56.857718Z 370024 Query FLUSH /*!40101 LOCAL */ TABLES
2017-09-28T22:42:56.875349Z 370024 Query FLUSH TABLES WITH READ LOCK
2017-09-28T22:42:56.876115Z 370024 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2017-09-28T22:42:56.876737Z 370024 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2017-09-28T22:42:56.877350Z 370024 Query SHOW VARIABLES LIKE 'gtid\_mode'
2017-09-28T22:42:56.883794Z 370024 Query SHOW MASTER STATUS
2017-09-28T22:42:56.884410Z 370024 Query UNLOCK TABLES
FROM INFORMATION_SCHEMA.PARTITIONS
FROM INFORMATION_SCHEMA.FILES
2017-09-28T22:42:56.936366Z 370024 Query SHOW VARIABLES LIKE 'ndbinfo\_version'
2017-09-28T22:42:56.938931Z 370024 Init DB test
2017-09-28T22:42:56.939138Z 370024 Query SHOW CREATE DATABASE IF NOT EXISTS `test`
2017-09-28T22:42:56.939242Z 370024 Query SAVEPOINT sp
2017-09-28T22:42:56.939331Z 370024 Query show tables
2017-09-28T22:42:56.939917Z 370024 Query show table status like 'BatchTemp'
2017-09-28T22:42:56.940558Z 370024 Query SET SQL_QUOTE_SHOW_CREATE=1
2017-09-28T22:42:56.940618Z 370024 Query SET SESSION character_set_results = 'binary'
2017-09-28T22:42:56.940755Z 370024 Query show create table `BatchTemp`
2017-09-28T22:42:56.941053Z 370024 Query SET SESSION character_set_results = 'utf8'
2017-09-28T22:42:56.941321Z 370024 Query show fields from `BatchTemp`
2017-09-28T22:42:56.942625Z 370024 Query show fields from `BatchTemp`
2017-09-28T22:42:56.943093Z 370024 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `BatchTemp`
2017-09-28T22:42:56.948903Z 370024 Query SET SESSION character_set_results = 'binary'
2017-09-28T22:42:56.949070Z 370024 Query use `test`
2017-09-28T22:42:56.949250Z 370024 Query select @@collation_database
2017-09-28T22:42:56.949513Z 370024 Query SHOW TRIGGERS LIKE 'BatchTemp'
2017-09-28T22:42:56.950046Z 370024 Query SET SESSION character_set_results = 'utf8'
2017-09-28T22:42:56.950190Z 370024 Query ROLLBACK TO SAVEPOINT sp

MySQL mysqldump备份与恢复的更多相关文章

  1. MySQL备份与恢复-mysqldump备份与恢复

    这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...

  2. MySQL的备份与恢复

    Linux下的mysql的备份与恢复 备份: 比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump 命令格式如下: [root@linuxsir01 root]# ...

  3. MySQL增量备份与恢复实例【转】

    小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的 ...

  4. Mysql 数据备份与恢复,用户创建,授权

    Mysql 数据备份与恢复,用户创建,授权 1. Mysqldump >outfile.sql 2. Mysql –uxxx –pxxx < backfile.sql 3. Create  ...

  5. 2020重新出发,MySql基础,MySql数据库备份与恢复

    @ 目录 MySQL数据库备份与恢复 数据库为什么需要备份 MySQL备份类型 MySQL热备份及恢复 逻辑备份 mysqldump SELECT INTO-OUTFILE mydumper 裸文件备 ...

  6. MySQL mysqldump数据导出详解

    介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明 ...

  7. MySQL mysqldump数据导出详解 --dump-slave 注意事项

    http://www.cnblogs.com/chenmh/p/5300370.html 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工 ...

  8. mysql mysqldump只导出表结构或只导出数据的实现方法

    mysql mysqldump只导出表结构或只导出数据的实现方法,需要的朋友可以参考下. mysql mysqldump 只导出表结构 不导出数据 复制代码代码如下: mysqldump --opt ...

  9. MYSQL数据库备份与恢复

    mysqldump -h主机名  -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql 备份MySQL数据库的命令 mysqldump -hhostname -u ...

随机推荐

  1. juniper常用命令

    Juniper防火墙基本命令 get interface ethernet0/0  查看 端口 常用查看命令 Get int 查看接口配置信息 Get int ethx/x 查看指定接口配置信息  G ...

  2. 网络安全-跨站脚本攻击XSS(Cross-Site Scripting)

    一.XSS攻击简介 作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的. 在XSS攻击中,一般有三个角色参与:攻击者.目标服务器.受害者 ...

  3. SSM mapper.xml

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  4. mysql启动报can't create/write to file 'var/run/mysqld/mysqld.pid 错误解决办法

    msql启动报错,启动不了. 进入mysql日志默认的路径为 /var/log/mysqld.log 查看日志,发现报错信息如下: can't create/write to file 'var/ru ...

  5. 生产环境中,通过域名映射ip切换工具SwitchHosts

    项目中,经常需要配置host.将某个域名指向某个ip.手动配置C:\Windows\System32\drivers\etc\hosts,非常不方便.这里分享一个可以高效切换host工具:Switch ...

  6. URAL 2062 树状数组

    一个长度为n的数组 每次对lr区间进行修改 如果要修改i 则对i i*2 i*3...都修改 最后单点查询值 思想是利用树状数组维护每一个区间的更新值 查询的时候得出这个点的所有因子的查询值的和 加上 ...

  7. PrepareStatement

    import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  8. 安装rackspace private cloud --4 配置Target hosts

    在每个target host上执行以下操作: Naming target hosts. Install the operating system. Generate and set up securi ...

  9. 07-THREE.JS 各种形状的几何图形

    <!DOCTYPE html> <html> <head> <title>Example 02.04 - Geometries</title> ...

  10. abd 命令

    adb全称Android Debug Bridge ,安卓调试桥接器.它是Android SDK里面的一个工具,用这个工具可以直接操作管理Android模拟器或者真实Android设备.adb的工作方 ...