vim /etc/my.cnf
在[mysqld]下添加
max_binlog_size = 1024000 //二進制日志最大1M
要進行mysql的增量備份,首先要開啟二進制日志功能
方法一:
在/etc/my.cnf文件中的[mysqld]下,添加
log-bin = mysql-bin
方法二:
使用mysqld --log-bin = 文件存放路徑/文件前綴,然后重新啟動mysql服務。
mysql增量恢復的方法:
一般恢復:
mysqlbinlog [--no-defaults] 增量備份文件 | mysql -uroot -p密碼
基於時間點的恢復:
從日志開頭截止到某個時間點的恢復:
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小時:分鍾:秒' 二進制日志 | mysql -uroot -p密碼
從某個時間點到日志結尾的恢復:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小時:分鍾:秒' 二進制日志 | mysql -uroot -p密碼
從某個時間點到某個時間的恢復:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小時:分鍾:秒' --stop-datetime='年-月-日 小時:分鍾:秒 二進制日志 | mysql -uroot -p密碼
基於位置的恢復:
mysqlbinlog --stop-position='操作id' 二進制日志 | mysql -uroot -p密碼
mysqlbinlog --start-position='操作id' 二進制日志 | mysql -uroot -p密碼
[root@localhost ~]# vim /opt/mysql_bak_zengbei.sh //shell腳本增量備份
#!/bin/bash
#MYSQL數據庫增量備份腳本。
#設置登錄變量
MY_USER="root"
MY_PASS="111111"
MY_HOST="localhost"
MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"
#定義備份路徑、工具、二進制日志前綴、二進制日志存放路徑
BF_TIME="$(date +%Y%m%d)"
BF_DIR="/mysql_bak/zengbei/$BF_TIME"
CMD="/usr/bin/mysqladmin"
QZ="mysql-bin"
LOG_DIR="/var/lib/mysql"
#拷貝二進制日志
[ -d $BF_DIR ] || mkdir-p $BF_DIR
$CMD $MY_CONN flush-logs
/bin/cp -p $(ls $LOG_DIR/$QZ.* | awk -v RS="" '{print $(NF-2)}') $BF_DIR
案例:
[root@localhost ~]# mysql -uroot -p111111
創建數據庫
MariaDB [(none)]> create database client;
使用數據庫
MariaDB [(none)]> use client
創建數據表
MariaDB [auth]> create table user_info (身份證 int(20),姓名 char(20),性別 char(2),用戶ID號 int(110),資費 int(10));
插入數據到數據表
MariaDB [auth]> insert into user_info values ('000000001','孫空武','男','011','100');
MariaDB [auth]> insert into user_info values ('000000002','藍凌','女','012','98');
MariaDB [auth]> insert into user_info values ('000000003','姜文','女','013','12');
MariaDB [auth]> insert into user_info values ('000000004','關園','男','014','38');
MariaDB [auth]> insert into user_info values ('000000005','羅中昆','男','015','39');
先進行一次完全備份
[root@localhost ~]# mkdir /mysql_bak
[root@localhost ~]# mysqldump -uroot -p111111 client user_info > /mysql_bak/client_user_info-$(date +%F).sql
[root@localhost ~]# mysqldump -uroot -p111111 client > /mysql_bak/client-$(date +%F).sql
先進行一次日志回滾(生成新的日志)
[root@localhost ~]# ls /var/lib/mysql/
aria_log.00000001 client ib_logfile1 mysql.sock
aria_log_control ibdata1 mysql performance_schema
auth ib_logfile0 mysql-bin.000001 mysql-bin.index test
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# mysqladmin -uroot -p111111 flush-logs
[root@localhost mysql]# ls
aria_log.00000001 client ib_logfile1 mysql-bin.000002 performance_schema
aria_log_control ibdata1 mysql mysql-bin.index test
auth ib_logfile0 mysql-bin.000001 mysql.sock
繼續錄入新的數據
[root@localhost ~]# mysql -uroot -p111111
MariaDB [(none)]> use client
MariaDB [client]> insert into user_info values('6','藍精靈','男','16','78');
MariaDB [client]> insert into user_info values('7','紅頭發','女','17','23');
MariaDB [client]>select * from user_info;
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 6 | 藍精靈 | 男 | 16 | 78 |
| 7 | 紅頭發 | 女 | 17 | 23 |
+-----------+-----------+--------+-------------+--------+
ctrl + D退出
進行增量備份
[root@localhost mysql]# mysqladmin -uroot -p111111 flush-logs
[root@localhost mysql]# ls
aria_log.00000001 client ib_logfile1 mysql-bin.000002 mysql.sock
aria_log_control ibdata1 mysql mysql-bin.000003 performance_schema
auth ib_logfile0 mysql-bin.000001 mysql-bin.index test
[root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000002
內容省略。。。。。。
[root@localhost mysql]# cp -p mysql-bin.000002 /mysql_bak/
模擬誤操作刪除user_info表
[root@localhost mysql]# mysql -uroot -p111111 -e'drop table client.user_info;'
[root@localhost mysql]# mysql -uroot -p111111 -e'select * from client.user_info;'
ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
恢復完全備份
[root@localhost mysql]# mysql -uroot -p111111 client < /mysql_bak/client-20191014-1414.sql
[root@localhost mysql]# mysql -uroot -p111111 -e'select * from client.user_info;'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
+-----------+-----------+--------+-------------+--------+
恢復增量備份
[root@localhost mysql]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -uroot -p111111
[root@localhost mysql]# mysql -uroot -p111111 -e'select * from client.user_info;'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 6 | 藍精靈 | 男 | 16 | 78 |
| 7 | 紅頭發 | 女 | 17 | 23 |
+-----------+-----------+--------+-------------+--------+
[root@localhost ~]# mysql -uroot -p111111 -e'drop table client.user_info;'
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info;'
ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
[root@localhost ~]# mysql -uroot -p111111 client < /mysql_bak/client-20191014-1414.sql
[root@localhost ~]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002
基於時間點的恢復:
--stop-datetime
僅恢復到2019-10-14 14:22:53之前的數據,不再恢復“紅頭發”的信息
[root@localhost ~]# mysqlbinlog --no-defaults --stop-datetime='2019-10-14 14:22:53' /mysql_bak/mysql-bin.000002 | mysql -uroot -p111111
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 6 | 藍精靈 | 男 | 16 | 78 |
+-----------+-----------+--------+-------------+--------+
僅恢復“紅頭發”,跳過“藍精靈”的信息
--start-datetime
[root@localhost ~]# mysql -uroot -p111111 -e'drop table client.user_info;'
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info;'
ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
[root@localhost ~]# mysql -uroot -p111111 client < /mysql_bak/client-20191014-1414.sql
[root@localhost ~]# mysqlbinlog --no-defaults --start-datetime='2019-10-14 14:22:53' /mysql_bak/mysql-bin.000002 | mysql -uroot -p111111
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info;'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 7 | 紅頭發 | 女 | 17 | 23 |
+-----------+-----------+--------+-------------+--------+
基於位置的恢復:
--stop-possion
[root@localhost ~]# mysql -uroot -p111111 -e'drop table client.user_info;'
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info;'
ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
[root@localhost ~]# mysql -uroot -p111111 client < /mysql_bak/client-20191014-1414.sql
[root@localhost ~]# mysqlbinlog --no-defaults --stop-position='468' /mysql_bak/mysql-bin.000002 | mysql -uroot -p111111
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 6 | 藍精靈 | 男 | 16 | 78 |
+-----------+-----------+--------+-------------+--------+
--start-possion
[root@localhost ~]# mysql -uroot -p111111 -e'drop table client.user_info;'
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info;'
ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
[root@localhost ~]# mysql -uroot -p111111 client < /mysql_bak/client-20191014-1414.sql
[root@localhost ~]# mysqlbinlog --no-defaults --start-position='538' /mysql_bak/mysql-bin.000002 | mysql -uroot -p111111
[root@localhost ~]# mysql -uroot -p111111 -e'select * from client.user_info'
+-----------+-----------+--------+-------------+--------+
| 身份證 | 姓名 | 性別 | 用戶ID號 | 資費 |
+-----------+-----------+--------+-------------+--------+
| 1 | 孫空武 | 男 | 11 | 100 |
| 2 | 藍凌 | 女 | 12 | 98 |
| 3 | 姜文 | 女 | 13 | 12 |
| 4 | 關園 | 男 | 14 | 38 |
| 5 | 羅中昆 | 男 | 15 | 39 |
| 7 | 紅頭發 | 女 | 17 | 23 |
+-----------+-----------+--------+-------------+--------+