MySQL的备份数据复原(mysqldump)

MySQL的备份数据复原(mysqldump)

MySQL的复原前提条件是要创建在,有彻底备份数据和二进制系统日志打开的前提条件下,而且二进制系统日志文档和彻底备份数据储放在与数据信息库文档不一样的硬盘上,不然当硬盘产生毁坏数据信息将没法开展修复。

打开二进制系统日志

打开二进制系统日志必须将MySQL中的sql_log_bin和log_bin这2个选择项

MariaDB [(none)] SHOW VARIABLES LIKE 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)

2.打开log_bin
留意:不必和数据信息库存量放到统一硬盘内,不必和数据信息库存量放到统一硬盘内,不必和数据信息库存量放到统一硬盘内关键的事儿说三遍。

[ ~]# mkdir /data/bin
[ ~]# chown -R mysql.mysql /data/bin #将文件目录的属主和属组都改成mysql

二进制系统日志文件目录建立结束后,改动配备文档,加上log-bin选择项,并特定相对路径,这里要留意mysql-bin是二进制系统日志的仰头。

[ ~]# vim /etc/mysql/f
log-bin=/data/bin/mysql-bin #mysql-bin为二进制系统日志的文档名的仰头

之上配备进行后重新启动mysql服务

[ ~]# service mysqld restart
Restarting mysqld (via systemctl): [ OK ]

这时二进制系统日志文件目录下早已空出了2个二进制系统日志文档

[ ~]# ll /data/bin/
total 12
-rw-rw---- 1 mysql mysql 351 May 6 16:51 mysql-bin.000001
-rw-rw---- 1 mysql mysql 54 May 6 16:51 mysql-bin.index
情景一、硬盘毁坏修复

生产制造时会产生储放数据信息的硬盘忽然产生毁坏而导致数据信息遗失的状况,这时就必须融合以前所做的彻底备份数据及其二进制系统日志开展将数据信息彻底修复

一、多数据库开展备份数据
[ ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
[ ~]# mysqldump -A --single-transaction --master-data=2 | xz /data/all.sql.xz
二、备份数据结束后数据信息库产生小一部分转变
MariaDB [(none)] INSERT hellodb.students(stuid,name,gender,age) VALUE(26,'linchong','M',30) ;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)] INSERT hellodb.students(stuid,name,gender,age) VALUE(27,'Lujunyi','M',30);
Query OK, 1 row affected (0.00 sec)
三、数据信息库产生毁坏,数据信息遗失
[ ~]# rm -rf /data/mysql/*
一、将mysqld服务终止
[ ~]# service mysqld stop
Stopping mysqld (via systemctl): [ OK ]
二、查询下二进制系统日志。

因为每一次起动服务都是再次转化成一个新的二进制系统日志,因此先查询下二进制系统日志的序号以防等下在应用二进制系统日志复原数据信息时复原了无须要的数据信息

[ ~]# ll /data/bin/
total 504
-rw-rw---- 1 mysql mysql 351 May 6 16:51 mysql-bin.000001
-rw-rw---- 1 mysql mysql 9388 May 6 17:01 mysql-bin.000002
-rw-rw---- 1 mysql mysql 81 May 6 17:03 mysql-bin.index
三、重新启动MySQL服务,原始化数据信息库
[ ~]# service mysqld start
Starting mysqld (via systemctl): [ OK ]
[ ~]# ll /data/mysql/
total 122924
-rw-rw---- 1 mysql mysql 16384 May 6 17:01 aria_log.
-rw-rw---- 1 mysql mysql 52 May 6 17:01 aria_log_control
drwx------ 2 mysql mysql 272 May 6 16:54 hellodb
-rw-rw---- 1 mysql mysql 1298 May 6 17:01 ib_buffer_pool
-rw-rw---- 1 mysql mysql  May 6 17:03 ibdata1
-rw-rw---- 1 mysql mysql  May 6 17:03 ib_logfile0
-rw-rw---- 1 mysql mysql  Apr 29 12:49 ib_logfile1
-rw-rw---- 1 mysql mysql  May 6 17:03 ibtmp1
-rw-rw---- 1 mysql mysql 6 May 6 17:03 localhost.localdomain.pid
-rw-rw---- 1 mysql mysql 0 Apr 29 12:57 
drwx------ 2 mysql root 4096 Apr 29 12:49 mysql
-rw-rw---- 1 mysql mysql 351 Apr 29 14:06 mysql-bin.000001
-rw-rw---- 1 mysql mysql 351 May 6 16:50 mysql-bin.000002
-rw-rw---- 1 mysql mysql 38 May 6 16:26 mysql-bin.index
-rw-rw---- 1 mysql mysql 0 May 6 16:50 mysql-bin.state
srwxrwxrwx 1 mysql mysql 0 May 6 17:03 mysql.sock
drwx------ 2 mysql mysql 20 Apr 29 12:49 performance_schema
drwx------ 2 mysql root 6 Apr 29 12:49 test
四、将彻底备份数据缓解压力
[ ~]# unxz /data/all.sql.xz 
五、因为彻底备份数据后数据信息又产生过更改因此必须运用二进制系统日志开展复原在运用二进制复原前,先查询下彻底备份数据时二进制系统日志所属的部位。
[ ~]# vim /data/all.sql 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=8946;
六、将彻底备份数据后造成二进制系统日志的数据信息导出来
[ ~]# mysqlbinlog --start-position=8946 /data/bin/mysql-bin.000002 /data/inc.log
七、进到MySQL,终止二进制系统日志纪录

因为接下去的实际操作是修复数据信息,因此这里不用让二进制系统日志纪录数据信息。

MariaDB [(none)] SET sql_log_bin=off;
Query OK, 0 rows affected (0.00 sec)
八、导进以前做的彻底备份数据
MariaDB [(none)] source /root/all.sql
九、导进彻底备份数据后造成的数据信息
MariaDB [(none)] source /data/inc.log 

查询数据信息库,及其彻底备份数据后提升的內容是不是存有

[ ~]# mysql -e 'SHOW DATABASES;SELECT * FROM hellodb.students where stuid '
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
+-------+----------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+----------+-----+--------+---------+-----------+
| 26 | linchong | 30 | M | NULL | NULL |
| 27 | Lujunyi | 30 | M | NULL | NULL |
+-------+----------+-----+--------+---------+-----------+
情景二、误删掉的修复

生产制造自然环境中通快递常会出現误删掉的将会性,这时就必须采用彻底备份数据,和一部分改动后的二进制系统日志来复原数据信息

一、多数据库开展彻底备份数据
[ ~]# mysqldump -A --single-transaction --master-data=2 | xz /data/all.sql.xz

一一段时间后数据信息库产生了误删掉实际操作,随后又开展了一部分别的的曾的实际操作

MariaDB [(none)] DROP TABLE hellodb.students;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)] INSERT hellodb.teachers VALUE (5,'Jiang Jieshi',50,'M');
Query OK, 1 row affected (0.00 sec)

这时发觉了数据信息库hellodb.students表删掉除

修复数据信息库 一、终止MySQL服务
[ ~]# service mysqld stop
Stopping mysqld (via systemctl): [ OK ]
二、将数据信息库文档内的文档清除
[ ~]# rm -rf /data/mysql/*
三、将彻底备份数据缓解压力
[ ~]# unxz /data/all.sql.xz 
四、查询彻底备份数据内,二进制系统日志的纪录点
[ ~]# vim /data/all.sql 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=494073;
五、查询二进制系统日志,并从二级制系统日志中导出来数据信息
[ ~]# ll /data/bin/
total 508
-rw-rw---- 1 mysql mysql 351 May 6 16:51 mysql-bin.000001
-rw-rw---- 1 mysql mysql 9388 May 6 17:01 mysql-bin.000002
-rw-rw---- 1 mysql mysql 494449 May 6 17:52 mysql-bin.000003
-rw-rw---- 1 mysql mysql 81 May 6 17:03 mysql-bin.index
-rw-rw---- 1 mysql mysql 8 May 6 17:52 mysql-bin.state
[ ~]# mysqlbinlog --start-position=494073 /data/bin/mysql-bin.000003 /data/inc.sql
六、从导出来的数据信息中寻找那一条误删掉的数据信息将其删掉或注解
[ ~]# vim /data/inc.sql
#DROP TABLE `hellodb`.`students` /* generated by server */
七、重新启动MySQL服务
[]# service mysqld start
Starting mysqld (via systemctl): [ OK ]
八、将二进制系统日志关掉
MariaDB [(none)] SET sql_log_bin=off;
Query OK, 0 rows affected (0.00 sec)
九、导进彻底备份数据
MariaDB [(none)] SOURCE /data/all.sql
MariaDB [test] SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
#这时删掉除的students表早已找到
MariaDB [test] SHOW TABLES FROM hellodb;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
7 rows in set (0.00 sec)
#可是操作失误后新加的纪录还没有有找到
MariaDB [test] SELECT * FROM hellodb.teachers ;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
+-----+---------------+-----+--------+
4 rows in set (0.00 sec)
十、导进二进制系统日志所转化成的改动后的文档
MariaDB [test] SOURCE /data/inc.sql
#导进后再度查询students表在
MariaDB [test] SHOW TABLES FROM hellodb;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
7 rows in set (0.00 sec)
#新加上的纪录也是有了
MariaDB [test] SELECT * FROM hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | Jiang Jieshi | 50 | M |
+-----+---------------+-----+--------+
5 rows in set (0.00 sec)