版权声明:勇哥出品必属精品违者必究,相信勇哥幸福一生,不信勇哥抱憾终身,盗版一时爽全家火葬场! https://blog.csdn.net/weixin_42837637/article/details/82844306
一、mysql备份方案
数据库备份方案:
- 全量备份
- 增量备份
- 差异备份
备份方案 | 特点 |
---|---|
全量备份 | 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。数据恢复快。备份时间长 |
增量备份 | 增量备份是指在一次全备份或上一次增量备份后,每次以后的备份只需备份与前一次相比增加者状语从句:被修改的文件。这就意味着,第一次增量备份的对象的英文进行全备后所产生的增加修改状语从句:文件的;第二次增量备份的对象是进行第一次增量。备份后所产生的增加和修改的文件,类推如此没有重复的备份数据备份短时间恢复数据时必须按一定的顺序进行 |
差异备份 | 备份上一次的完全备份后发生变化的所有文件。差异备份的英文指在一次全备份后到进行差异备份的这段时间内对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全量备份和最后一次差异备份进行恢复。 |
1.mysql备份工具mysqldump
//语法:
mysqldump [OPTIONS] database [tables …]
mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]
//常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
二、mysql二进制的安装
1.创建用户和用户组
[root@localhost ~]# groupadd -r mysql
[root@localhost ~]# useradd -M -s /sbin/nologin -g mysql mysql
[root@localhost ~]# tar xf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ln -sv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql
2.修改目录属组属主
[root@localhost local]# chown -R mysql.mysql /usr/local/mysql
3.添加环境变量
[root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH'>/etc/profile.d/mysql.sh
[root@localhost ~]# . /etc/profile.d/mysql.sh
[root@localhost ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
4.建立数据库存放目录
[root@localhost ~]# mkdir /opt/data
[root@localhost ~]# chown -R mysql.mysql /opt/data/
[root@localhost ~]#/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
5.生成配置文件
[root@localhost ~]# cat > /etc/my.cnf <<EOF
> [mysqld]
> basedir = /usr/local/mysql
> datadir = /opt/data
> socket = /tmp/mysql.sock
> port = 3306
> pid-file = /opt/data/mysql.pid
> user = mysql
> skip-name-resolve
> EOF
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
6.配置启动服务脚本
[root@localhost ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@localhost ~]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld
7.启动mysql服务
[root@localhost ~]# /etc/init.d/mysqld start
[root@localhost ~]# ps -ef|grep mysql
8.使用临时密码修改为新密码
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> set password = password('qinyong123!') ;
Query OK, 0 rows affected, 1 warning (0.00 sec)
9.创建仓库和表
mysql> create database qinyong;
Query OK, 1 row affected (0.01 sec)
mysql> use qinyong;
Database changed
mysql> create table student(id int(11)NOT NULL,name char(100)NOT NULL,age tinyint NULL);
Query OK, 0 rows affected (0.02 sec)
mysql> create database qin;
Query OK, 1 row affected (0.00 sec)
mysql> use qin;
Database changed
mysql> create table student(id int(11)NOT NULL,name char(100)NOT NULL,age tinyint NULL);
Query OK, 0 rows affected (0.06 sec)
10.查看数据库和表然后备份
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qin |
| qinyong |
| sys |
+--------------------+
6 rows in set (0.05 sec)
mysql> use qinyong
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_qinyong |
+-------------------+
| student |
+-------------------+
1 row in set (0.00 sec)
11.备份数据库和表
[root@localhost ~]# mysqldump -uroot -p qinyong student >student-table-20180926.sql
Enter password:
[root@localhost ~]# ls
all-0925.sql anaconda-ks.cfg mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz student-table-20180926.sql
[root@localhost ~]# mysqldump -uroot -p --databases qinyong>qinyong-database-20180926.sql
Enter password:
[root@localhost ~]# ls
all-0925.sql anaconda-ks.cfg mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz qinyong-database-20180926.sql student-table-20180926.sql
12.删除表然后还原表
mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
[root@localhost ~]# mysql -uroot -p qinyong < student-table-20180926.sql
Enter password:
[root@localhost ~]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qin |
| qinyong |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> use qinyong;
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_qinyong |
+-------------------+
| student |
+-------------------+
1 row in set (0.00 sec)
13.删除库然后还原库
mysql> drop database qinyong;
Query OK, 1 row affected (0.06 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qin |
| sys |
+--------------------+
5 rows in set (0.01 sec)
[root@localhost ~]# mysql -uroot -p < qinyong-database-20180926.sql
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qin |
| qinyong |
| sys |
+--------------------+
6 rows in set (0.00 sec)
三、差异备份
1.开启mysql服务器的二进制日志功能
[root@localhost ~]#vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
server-id=1 //设置服务器标识符
log-bin=mysql_bin //开启二进制日志功能
2.查看数据库的内容
[root@localhost ~]#service mysqld restart
mysql> show tables from qinyong; \\有两张表
+-------------------+
| Tables_in_qinyong |
+-------------------+
| runtime |
| student |
+-------------------+
2 rows in set (0.00 sec)
mysql> show tables;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | NULL |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
[root@localhost ~]# ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql 1246 2月 22 16:13 mysql_bin.000001
-rw-r-----. 1 mysql mysql 19 2月 22 16:13 mysql_bin.index
3.数据库进行完全备份
[root@localhost ~]# mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > all-201902230940.sql
[root@localhost ~]# ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql 154 2月 23 09:40 mysql_bin.000004
-rw-r-----. 1 mysql mysql 19 2月 23 09:41 mysql_bin.index
4.两次修改以后
mysql> select * from qinyong.student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | NULL |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
mysql> select * from qinyong.student; //第一次修改
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | NULL |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
| 12 | xiaoming | 6 |
| 13 | xiaohong | 7 |
+----+-------------+------+
13 rows in set (0.00 sec)
mysql> insert into student values(12,'xiaoming',6),(13,'xiaohong',7);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> update student set age = 10 where name = 'lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from qinyong.student; //第二次修改以后
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | 10 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
| 12 | xiaoming | 6 |
| 13 | xiaohong | 7 |
+----+-------------+------+
13 rows in set (0.00 sec)
5.模拟误删数据
[root@localhost ~]# mysql -uroot -p -e 'drop database qinyong;'
[root@localhost ~]# mysql -uroot -p -e 'show databases;'
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zabbix |
+--------------------+
[root@localhost ~]# mysqladmin -uroot -p flush-logs
[root@localhost ~]# ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql 945 2月 23 10:02 mysql_bin.000004
-rw-r-----. 1 mysql mysql 154 2月 23 10:02 mysql_bin.000005
-rw-r-----. 1 mysql mysql 38 2月 23 10:02 mysql_bin.index
6.恢复误删的数据
[root@localhost ~]# mysql -uroot -p <all-201902230940.sql
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qinyong |
| sys |
| zabbix |
+--------------------+
6 rows in set (0.00 sec)
mysql> show tables from qinyong;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from qinyong.student; //恢复到最初的列表
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | NULL |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
7.查找到误删数据库记录的位置
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000005 | 3179163 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> show binlog events in 'mysql_bin.000004'\G
*************************** 1. row ***************************
Log_name: mysql_bin.000004
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 123
Info: Server ver: 5.7.23-log, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql_bin.000004
Pos: 123
Event_type: Previous_gtids
Server_id: 1
End_log_pos: 154
Info:
*************************** 3. row ***************************
Log_name: mysql_bin.000004
Pos: 154
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 219
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************
Log_name: mysql_bin.000004
Pos: 219
Event_type: Query
Server_id: 1
End_log_pos: 294
Info: BEGIN
*************************** 5. row ***************************
Log_name: mysql_bin.000004
Pos: 294
Event_type: Table_map
Server_id: 1
End_log_pos: 351
Info: table_id: 141 (qinyong.student)
*************************** 6. row ***************************
Log_name: mysql_bin.000004
Pos: 351
Event_type: Write_rows
Server_id: 1
End_log_pos: 416
Info: table_id: 141 flags: STMT_END_F
*************************** 7. row ***************************
Log_name: mysql_bin.000004
Pos: 416
Event_type: Xid
Server_id: 1
End_log_pos: 447
Info: COMMIT /* xid=2449 */
*************************** 8. row ***************************
Log_name: mysql_bin.000004
Pos: 447
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 512
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 9. row ***************************
Log_name: mysql_bin.000004
Pos: 512
Event_type: Query
Server_id: 1
End_log_pos: 587
Info: BEGIN
*************************** 10. row ***************************
Log_name: mysql_bin.000004
Pos: 587
Event_type: Table_map
Server_id: 1
End_log_pos: 644
Info: table_id: 141 (qinyong.student)
*************************** 11. row ***************************
Log_name: mysql_bin.000004
Pos: 644
Event_type: Update_rows
Server_id: 1
End_log_pos: 701
Info: table_id: 141 flags: STMT_END_F
*************************** 12. row ***************************
Log_name: mysql_bin.000004
Pos: 701
Event_type: Xid
Server_id: 1
End_log_pos: 732
Info: COMMIT /* xid=2453 */
*************************** 13. row ***************************
Log_name: mysql_bin.000004
Pos: 732
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 797
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 14. row *************************** 删除数据关键节点
Log_name: mysql_bin.000004
Pos: 797
Event_type: Query
Server_id: 1
End_log_pos: 898
Info: drop database qinyong
*************************** 15. row ***************************
Log_name: mysql_bin.000004
Pos: 898
Event_type: Rotate
Server_id: 1
End_log_pos: 945
Info: mysql_bin.000005;pos=4
15 rows in set (0.00 sec)
8.找到关键恢复点,恢复到此删除数据前
[root@localhost ~]# mysqlbinlog --stop-position=797 /opt/data/mysql_bin.000004 |mysql -uroot -p
Enter password:
9.验证数据是否恢复
mysql> select * from qinyong.student; //验证成功
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | wangqing | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | 10 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
| 12 | xiaoming | 6 |
| 13 | xiaohong | 7 |
+----+-------------+------+