xuke123 发表于 2018-10-2 13:30:54

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

  linux下mysql日志管理及mysql备份还原
  1.SHOW GLOBAL VARIABLES LIKE '%log%';显示所有日志相关的选项
  2.错误日志:log_error和log_warnings
  3.一般查询日志:general_log general_log_file log log_output
  4.慢查询日志:long_query_time log_slow_queries={YES|NO} slow_query_log low_query_log_file
  5.二进制日志:任何引起或可能引起数据库变化的操作;复制和即时点恢复;
  二进制日志的格式:binlog_format
  基于语句: statement
  基于行: row
  混合方式: mixed
  二进制日志事件:产生的时间 和 相对位置
  二进制日志文件:索引文件 和 二进制日志文件
  mysql> SHOW MASTER STATUS;#查看当前正在使用的二进制日志文件
  mysql> SHOW BINARY LOGS; #查看所有日志文件:
  mysql> SHOW BINLOG EVENTS IN '二进制日志文件' ;#查看事件:
  例如: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 #还原当天数据库崩溃时的数据
  10.单表备份
  备份格式:SELECT * INTO OUTFILE '表的备份路径.txt' FROM 表名 ;
  还原格式:LOAD DATA INFILE '表的备份路径.txt' INTO TABLE 表名;
  mysql> CREATE TABLE students_new LIKE students; #复制一个与源表结构一样的表
  mysql> SELECT * INTO OUTFILE '/tmp/students_new.txt' FROM students;
  mysql> DRIO TABLE students;
  mysql> LOAD DATA INFILE '/tmp/students_new.txt' INTO TABLE students_new;
  11.LVM快照备份
  11.1.找开会话,模拟启动事务
  mysql>START TRANSACTION;
  11.2.打开另外一个会话,加读锁,锁定所有表;
  mysql> FLUSH TABLES WITH READ LOCK;
  mysql> FLUSH LOGS;
  mysql> SHOW MASTER STATUS;
  11.3.通过另一个终端,保存二进制日志文件及相关位置信息;
  # mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /backup/master-`data +%F`.info
  11.4.创建快照卷
  # lvcreate -L 100M -s -p r -n mydata-snap /dev/myvg/mydata
  11.5.释放锁
  mysql> UNLOCK TABLES;
  11.6.挂载快照卷并备份
  mount -o ro/dev/myvg/mydata /mnt
  cd /mnt/data
  cp -a /mnt/data/* /backup/bak-full-`data +%F`
  11.7.删除快照卷;
  cd
  umount /mnt
  lvremove --froce /dev/myvg/mydata-snap
  cp /backup/bak-full-2016-07-11
  rm -rf mysql-bin.*
  11.8.模拟添加数据并滚动日志
  mysql> USE jiaowu;
  mysql> INSERT INTO tutors (Tname) VALUES ('stu200');
  mysql> FLUSH LOGS;
  mysql> INSERT INTO tutors (Tname) VALUES ('stu201');
  mysql> INSERT INTO tutors (Tname) VALUES ('stu202');
  mysql> FLUSH LOGS;
  11.9.备份上次快照后增加的二进制日志;
  cp /mydata/data
  cat /backup/master-2016-07-11.info #查看备份时的二制日志文件,且备份它之后所有二制日志文件
  mysqlbinlog --start-datetime='16-07-11 15:30:08' mysql-bin.000005 mysql-bin.000006 > /backup/increment-`data +F-%H-%M-%S`.sql
  11.10.模拟删除mysql数据库数据目录,导致mysql数据崩溃
  service mysqld stop
  rm -rf /mydata/data/*
  11.11.还原数据库
  cp -a /backup/bak-full-2016-07-11/* /mydata/data/
  ls -l /mydata/data
  service mysqld start
  mysql> SET sql_log_bin=0; #连上mysql并暂时关闭二进制日志功能
  mysql> source /backup/increment-2016-07-11-15-58-36.sql #导入增量二进制日志文件
  mysql> SET sql_log_bin=0; #连上mysql并开启二进制日志功能

页: [1]
查看完整版本: linux下mysql日志管理及mysql备份还原