---------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000027 | 370 |
| mysql-bin.000028 | 120 |
+------------------+-----------+
2 rows in set (0.00 sec)
?
?
这里 flush logs 进行增量备份,然后将增量备份的 bianry log 文件 mysql-bin.000027 也存储起来。
?
然后在进行一条 delete 语句:
?
?
mysql> select * from user;
+----+----------+------+-------------+----------+
| id | name| sex | phone | addr|
+----+----------+------+-------------+----------+
| 1 | yuanfang | 1 | 14465463786 | hangzhou |
| 2 | Andy| 0 | 14465463786 | beijing |
| 3 | peter | 0 | 14465463786 | Hongkong |
+----+----------+------+-------------+----------+
3 rows in set (0.00 sec)
?
到这里
数据库的最新状态是:user 表只有3条记录。
?
然后我们同样将 mysql-bin.000028 也存储起来。
?
4)然后我们删除 data-dir 目录中的所有文件,然后开始还原:
?
[root@localhost mysql]# pwd
/var/lib/mysql
[root@localhost mysql]# mv ./* /backup/before_delete/
此时 data-dir 目录是空的。然后我们试图使用 mysqladmin -uroot -p shutdown 来关闭mysqld,发现早不到 mysql.sock 无法关闭,我们只好使用
?
killall mysqld
?
来关闭。
?
?
进入到 /usr/local/mysql/script 目录,然后执行初始化:
?
./mysql_install_db ?--user=mysql --datadir=/var/lib/mysql --basedir=/usr/local/mysql
?
?./mysql_install_db
初始化成功之后,执行:
?
/usr/local/mysql/bin/mysql_secure_installation
?
来进行密码设置。这一步可能会报错:找不到 /tmp/mysql.sock 文,解决方法,在/etc/my.cnf 中的[client], [mysql], [mysqld] 都进行下面的设置:
?
socket=/tmp/mysql.sock
?
然后重新执行:/usr/local/mysql/bin/mysql_secure_installation 就行了。
?
初始化完成之后,我们使用备份的sql脚本来进行恢复:
?
[root@localhost ~]# mysql -uroot -p < gs_ngx_lua_backup.sql
执行完成之后,发现 gs 和 ngx_lua 数据库都还原出来了,但是他们的数据不是最新的数据:
?
?
mysql> use gs;
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> select * from user;
+----+----------+------+----------------+----------+
| id | name| sex | phone| addr|
+----+----------+------+----------------+----------+
| 1 | yuanfang | 1 | 14465463786 | hangzhou |
| 2 | Andy| 0 | 14465463786 | beijing |
| 3 | peter | 0 | 14465463786 | Hongkong |
| 4 | lexin | 1 | 36565634 | shenzhen |
| 5 | lexin2 | 1 | 43563436565634 | aomao |
+----+----------+------+----------------+----------+
5 rows in set (0.01 sec)
?
?
这是因为,我们还没有使用 mysql-bin.000027 和 mysql-bin.000028 两个binary log。mysql-bin.000027 是我们前面模拟的增量备份,而mysql-bin.000028 是 删除data-dir目录时,最新的binary log。依次应用了这两个binary log之后,数据库才能恢复到最新的状态。
?
6)应用 binary log:
?
[root@localhost backup]# pwd
/backup
[root@localhost backup]# mysqlbinlog mysql-bin.000027 > 27.sql
[root@localhost backup]# mysqlbinlog mysql-bin.000028 > 29.sql
mysqlbinlog mysql-bin.000027 > 27.sql 得到了 27.sql 和 28.sql 之后,使用 mysql 来执行:
?
mysql -uroot -p < 27.sql; 应用了增量备份的binary log.
?
然后查看数据:
?
mysql> mysql> select * from user;
+----+----------+------+-------------+----------+
| id | name| sex | phone | addr|
+----+----------+------+-------------+----------+
| 1 | yuanfang | 1 | 14465463786 | hangzhou |
| 2 | Andy| 0 | 14465463786 | beijing |
| 3 | peter | 0 | 14465463786 | Hongkong |
| 4 | lexin | 1 | 36565634 | shenzhen |
+----+----------+------+-------------+----------+
4 rows in set (0.00 sec)
?
?
然应用 28.sql :
?
mysql -uroot -p < 28.sql;
?
得到最新的状态:
?
mysql> select * from user;
+----+----------+------+-------------+----