当前位置:Gxlcms > 数据库问题 > linux下mysql日志管理及mysql备份还原

linux下mysql日志管理及mysql备份还原

时间:2021-07-01 10:21:17 帮助过:16人阅读

二进制日志的格式:binlog_format

  基于语句: statement

  基于行: row

  混合方式: mixed

二进制日志事件:产生的时间 和 相对位置

二进制日志文件:索引文件 和 二进制日志文件

 mysql> SHOW MASTER STATUS;#查看当前正在使用的二进制日志文件

 mysql> SHOW BINARY LOGS; #查看所有日志文件:

 mysql> SHOW BINLOG EVENTS IN ‘二进制日志文件‘ [FROM 位置];#查看事件:

    例如:SHOW BINLOG EVENTS IN ‘mysql-bin.000004‘ FROM 107;

删除二进制日志文件: 删除指定二进制日志文件之前的所有日志文件

 mysql> PURGE BINARY LOGS TO ‘二进制日志文件‘

查看日志信息:mysqlbinlog命令选项如下:

         --start-datetime  --stop-datetime

         --start-position  --stop-position

    举例:mysqlbinlog --start-position 177 --stop-position 331 mysql-bin.000004;

       mysqlbinlog --start-datetime=‘16-07-07 13:32:07‘ mysql-bin.000004;

滚动二进制日志:FLUSH LOGS;

6.中继日志:从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件;

7.事务日志:事务性存储引擎用于保证原子性、一致性、隔离性和持久性;

 innodb_flush_log_at_trx_commit:

  0: 每秒同步,并执行磁盘flush操作;

  1:每事务同步,并执行磁盘flush操作;

  2: 每事务同步,但不执行磁盘flush操作;

8.mysqldump备份和还原数据库工具

8.1.备份单个数据库,或库中特定表

  格式:mysqldump 数据库名 [表1] [表2]

   --master-data={0|1|2}

0: 不记录二进制日志文件及路位置;

1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;

2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;

   --lock-all-tables:锁定所有表

   --flush-logs: 执行日志flush;

   --single-transaction启动热备;如果指定库中的表类型均为InnoDB

8.2.备份多个库:

--all-databases: 备份所有库

--databases DB_NAME,DB_NAME,...: 备份指定库

--events 事件调度器

--routines 存储过程和存储函数

--triggers 触发器

单个数据库备份 方法一:

mysql>FLUSH TABLES WITH READ LOCK;

mysql>FLUSH LOGS;

mysql>SHOW BINARY LOGS;

#mysqldump -u root -p --master-data=2 jiaowu>/root/jiaowu.sql #备份并没有创建数据库的语句

mysql>UNLOCK TABLES;

mysql>CREATE DATABASE jiaowu;  #必须手动创建数据库

#mysql jiaowu < /root/jiaowu.sql  #指定还原至指定数据库

单个数据库备份方法二:

#mysqldump -u root -p --lock-all-tables --flush-logs --masterdata=2 jiaowu>/root/jiaowu.sql

所有数据库完全备份:

#mysqldump -u root -p --lock-all-tables --flush-logs --all-databases  --master-data=2 > /root/alldatabases.sql

9.实例:利用mysqldump命令实现对所有数据库每周做完全备份和每天做增量备份,并且实现还原

建议:mysql数据目录放置独立硬盘或LVM中,二进制日志文件也要放置在其他目录

以下利用实验环境模拟实现:注意本实验二进制日志文件名以自己实验环境为准

9.1.周末做完整备份所有数据库

#mysqldump -u root -p --lock-all-tables --flush-logs --all-databases  --masterdata=2  > /root/alldatabases.sql

9.2.清除滚动日志之前的所有二进制文件,但清除之前建议最好保存一下

mysql>PURGE BINARY LOGS TO ‘mysql-bin.000010‘;

mysql>SHOW BINARY LOGS;

9.3.完整备份数据库后,过了一天,模拟数据库有删除一个数据

mysql>USE jiaowu;

mysql>DELETE FROM tutors WHERE Age>80;

9.4.每天做增量备份

mysql>FLUSH LOGS;  #滚动日志

#cd /mydata/data

#cp mysql-bin.000010 /root  #直接复制增量二进制日志文件

#mysqlbinlog mysql-bin.0000010 > /root/increment_"date +%F-%H-%M-%S".sql #或保存至sql语句

9.5.模拟又过了一天,数据库有插入一条数据

mysql>USE jiaowu;

mysql>INSERT INTO tutors (Tname) VALUES ("Tom");

9.6.模拟当天数据库崩溃,手动删除数据目录所有文件导致数据库无法使用

#cd /mydata/data

#cp mysql-bin.000011 /root/  #备份当前正使用的二进制日志文件

#rm -rf *

9.7.利用之前的备份,模拟实现还原数据库

#killall mysqld

#cd /usr/local/mysql

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ #初始化数据库

#service mysqld start

#cd

#mysql -u root -p < alldatabases.sql #还原完整备份时的数据库

#mysql -u root -p < increment_2016-07-08-13-30-00.sql #还原增量备份的数据

#mysqlbinlog mysql-bin.000011 | mysql -u root -p #还原当天数据库崩溃时的数据

本文出自 “夏维柳” 博客,请务必保留此出处http://willow.blog.51cto.com/6574604/1812598

linux下mysql日志管理及mysql备份还原

标签:linux下mysql日志管理及mysql备份还原

人气教程排行