三夏时光

@三夏时光

一期一会,世当珍惜!

文章 22
朋友 10
来访 22

0-我自己

1-大神们

三夏时光

  • MySQL

MySQL数据安全核心知识之备份技能

简介:介绍备份数据的重要性以及一些常见的数据备份技能

1 、数据安全之备份的背景意义

简介:数据库备份的意义

  • 数据备份的意义:
(1)保护数据的安全;
(2)在出现意外的时候(硬盘的损坏,断电,黑客的攻击),以便数据的恢复;
(3)导出生产的数据以便研发人员或者测试人员测试学习;
(4)高权限的人员操作失误导致数据丢失,以便恢复。

2、mysql数据安全之备份的介绍

简介:介绍数据备份

  • 数据库的备份类型:
(1)完全备份:对整个数据库的数据进行备份;
(2)部分备份:对部分数据进行备份(可以是一张表也可以是多张表)
        增量备份:是以上一次备份为基础来备份变更数据的,节约空间;
        差异备份:是以第一次完全备份的基础来备份变更备份的,浪费空间。
  • 数据库备份的方式:
(1)逻辑备份:直接生成sql语句保存起来,在恢复数据的时候执行备份的sql语句来实现数据的恢复;
(2)物理备份:直接拷贝相关的物理数据;
区别:逻辑备份效率低,恢复数据效率低,但是逻辑备份节约空间;物理备份浪费空间,但是相对逻辑备份而言效率比较高。
  • 数据库备份的场景:
(1)热备份:备份时,数据库的读写操作不会受到影响;
(2)温备份:备份时,数据库的读操作可以进行,但是写操作不能执行;
(3)冷备份:备份时,不能进行任何操作。

3、mysql数据安全之mysqldump备份实例(跨机器)

简介:如何利用mysql自带命令mysqldump来备份单库或者多库

  • mysqldump使用语法:
 mysqldump -u 用户 -h host -p 密码 dbname table > 路径
  • 远程备份单库例子:
mysqldump -uroot -pabc123456 -h120.25.93.69 zabbix | gzip > /mysql_data_back/zabbix_users.sql.gz
  • 远程备份单库例子并保留创建库语句:
mysqldump -uroot -pabc123456 -h120.25.93.69 --databases zabbix | gzip > mysql_data_back/zabbix_bak.sql.gz
  • 远程备份单库单表的例子:
mysqldump -uroot -pabc123456 -h120.25.93.69 zabbix users | gzip > /mysql_data_back/zabbix_users.sql.gz  
  • 远程备份多库的例子:
mysqldump -uroot -pabc123456 -h120.25.93.69 --databases zabbix XD | gzip > /mysql_data_back/zabbix_XD.sql.gz
  • 远程备份全库的例子:
mysqldump -uroot -pabc123456 -h120.25.93.69 --all-databases | gzip > /mysql_data_back/all.sql.gz

4、mysql数据安全之mysql数据的恢复

简介:如何恢复数据

  • 远程恢复数据(备份的数据文件里有创建库的语句):
mysql -uroot -pabc123456 -h120.25.93.69 < zabbix_bak.sql 
  • 远程恢复数据(备份的数据文件里没有创建库的语句):
mysql -uroot -pabc123456 -h120.25.93.69 zabbix < zabbix_bak.s

5、mysql数据安全之物理备份

简介:详解数据库源文件以及如何物理备份

  • 看找数据库源文件路径(一):
mysql> show variables like 'datadir%';
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| datadir | /data/mydata/       |
+---------------+---------------+
  • 看找数据库源文件路径(二):
cat /etc/my.cnf
  • MyISAM表源文件:
db.opt:创建库的时候生成,主要存储着当前库的默认字符集和字符校验规则;
.frm :记录着表结构信息的文件;
.MYI:记录着索引的文件;
.MYD :记录着表的数据。
  • InnoDB表源文件:InnoDB有着共享表空间跟独立表空间的概念。
db.opt:创建库的时候生成,主要存储着当前库的默认字符集和字符校验规则;
.frm :记录着表结构信息的文件;
.ibd :独立表空间,里边记录这个表的数据和索引;
ibdata1:共享表空间,里边记录表的数据和索引/
  • 请求全局读锁:
flush tables with read lock;
  • 解锁:
unlock tables;

6、mysql数据安全之利用二进制日志mysqlbinlog备份数据

简介:讲解如何利用二进制日志来备份数据

  • 什么是二进制日志:

二进制日志就是记录着mysql数据库中的一些写入性操作,比如一些增删改,但是,不包括查询!

  • 二进制日志有哪些功能:

一般情况下,二进制日志有着数据复制和数据恢复的功能。

  • 注意:

开启二进制日志会有1%的性能消耗!

  • 查看二进制日志是否开启:
mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name | Value                   |
+---------------------------------+-------+
| log_bin       | OFF                     |
  • 开启二进制日志 : vi /etc/my.cnf
[mysqld]
log-bin=/data/mydata/log_bin/mysql-bin
server-id=1
  • 查看所有的binlog日志列表:
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 | 23638     |
+------------------+-----------+ 
  • 刷新二进制日志:
flush logs;
  • 重置(清空)二进制日志文件:
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 | 1091      |
+------------------+-----------+ 
  • 使用mysqldump备份数据时,加上-F选项可以重新生成一个新的二进制日志文件
mysqldump -uroot -p XD user -F > user_bak.sql

7、mysql数据安全之利用二进制日志mysqlbinlog恢复数据

简介:讲解如何利用二进制日志来恢复数据

  • 查看二进制日志文件的内容报错:
[root@xdclass-public log_bin]# mysqlbinlog mysql-bin.000002
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
  • 解决方法:
第一种:在mysqlbinlog 后边加上 --no-defaults
第二种:注释掉配置文件里边的default-character-set=utf8
  • 把二进制日志文件导出成普通文件:
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000002 > mysqlbin.sql 
  • 找出要恢复的位置:
(1)找出关键字的行数:mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | grep -iw 'drop'

[root@xdclass-public log_bin]# mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | grep -iw 'drop'
4180 DROP TABLE `user` /* generated by server */

(2)打印出相关内容:mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | sed -n '4170,4180p'

[root@xdclass-public log_bin]# mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | sed -n '4170,4180p'
4170 # at 59578
4171 #190419 0:41:48 server id 1 end_log_pos 59609 CRC32 0x36cda2b7 Xid = 
6380
4172 COMMIT/*!*/;
4173 # at 59609
4174 #190419 0:41:48 server id 1 end_log_pos 59674 CRC32 0x8de2f06a
Anonymous_GTID last_committed=145 sequence_number=146
4175 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
4176 # at 59674
4177 #190419 0:41:48 server id 1 end_log_pos 59787 CRC32 0x6b2edd2b Query 
thread_id=14 exec_time=0 error_code=0
4178 use `XD`/*!*/;
4179 SET TIMESTAMP=1555605708/*!*/;
4180 DROP TABLE `user` /* generated by server */
[root@xdclass-public log_bin]#
  • 恢复数据:

第一步:把备份的数据表user恢复到数据库中:mysql -uroot -p XD < /mysql_data_back/user_bak.sql

第二步:利用上面找到的删除的位置进行恢复数据

mysqlbinlog --no-defaults --set-charset=utf8 --stop-position="59674" 
/data/mydata/log_bin/mysql-bin.000002 | mysql -uroot -p
  • 登录数据库查看数据是否恢复回来

Comments | NOTHING

  游客,你好 修改资料

*邮箱和昵称必须填写