MySQL怎样实现备份与恢复
发布时间:2022-01-12 07:23:11 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MySQL如何实现备份与恢复,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 实验环境:RHEL5.8 ,SElinux关闭,MySQL是tar包初始化安装版本5.5.28 一.测试环境准备 1.1 mysql的安装就不说了,见 http://www.linuxidc.com/
小编给大家分享一下MySQL如何实现备份与恢复,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 实验环境:RHEL5.8 ,SElinux关闭,MySQL是tar包初始化安装版本5.5.28 一.测试环境准备 1.1 mysql的安装就不说了,见 http://www.linuxidc.com/Linux/2012-04/58990.htm 1.2 编缉/etc/my.cnf把二进制日志存放目录改到其它非数据目录,innodb每表一文件 建立一目录用于存放二进制日志 mkdir /mybinlog chown mysql:mysql /mybinlog 修改my.cnf vim /etc/my.cnf log-bin=/mybinlog/mysql-bin ##二进制日志目录及文件名前缀 innodb_file_per_table = 1 ##启用InnoDB表每表一文件,默认所有库使用一个表空间 启动mysqld service mysqld start 1.3 创建一个测试库与测试表 mysql> create database laoguang; mysql> use laoguang; mysql> create table linux (id tinyint auto_increment primary key,name char(10)); mysql> insert into linux (name) values ('apache'),('nginx'),('php'); 1.4 创建用于存放备份的目录 mkdir /myback chown -R mysql:mysql /myback 二,用mysqldump实现备份 2.1 mysqldump用来温备,所以我们得为所有库加读锁,并且滚动一下二进制日志,并记录当前二进制文件位置 mysqldump --all-databases --lock-all-tables --routines --triggers --master-data=2 --flush-logs > /myback/2012-12-3.19-23.full.sql --all-tables 备份所有库 --lock-all-tables 为所有表加读锁 --routinge 存储过程与函数 --triggers 触发器 --master-data=2 在备份文件中记录当前二进制日志的位置,并且为注释的,1是不注释掉在主从复制中才有意义 --flush-logs 日志滚动一次 查看有没有备份成功,有没有启用新二进制的日志,查看备份的文件中有没有记录完整备份后二进制的位置 备份二进制日志 cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001 2.2 模拟数据库意外损坏,测试完整恢复 rm -rf /data/mydata/* rm -rf /mybinlog/* 初始化mysql并启动mysql cd /usr/local/mysql ./scripts/mysql_install_db --user=mysql--datadir=/data/mydata rm -rf /mybinlog/* ##因为我们不是全新初始化的,可能会有报错的二进制日志,我们不需要 service mysqld start ##启动时会重新生成新的二进制日志的 恢复到备份状态,备份前先关闭对恢复过程的二进制日志记录,因为记录恢复语句是毫无意义的 mysql> set global sql_log_bin=0; mysql < /myback/2012-12-3.19-23.full.sql ##如果有账号密码记的-u -h哦 打开记录并查看恢复状况 mysql> set global sql_log_bin=1; mysql> show databases; 打开二进制记录并查看恢复状况 mysql> set global sql_log_bin=1; mysql> show databases; 2.3 模拟一种场景,我往linux表中新添加了数据,然后不小心将这个表删了,我们要恢复到删除之前的状态,并且新加的数据还存在。 2.3.1 新增数据 mysql> use laoguang; mysql> insert into linux (name) values ('haddop'), ('mysql'); mysql> drop table linux; mysql> show master status; ##查看当前所在二进制日志中的位置 +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 9005 | | | +------------------+----------+--------------+------------------+ 我们先恢复完整数据,再恢复完整备份后到删除之前的数据,对应二进制日志就是完整备份后的二进制日志位置到删除表之前的位置 2.3.2 先恢复完整备份,同样恢复过程不要记录日志 mysql > set global sql_log_bin=0; mysql < /myback/2012-12-3.19-23.full.sql 2.3.3 查看删除表时的记录位置 mysqlbinlog /mybinlog/mysql-bin.000001 # at 8893 #121202 14:14:07 server id 1 end_log_pos 9005 Query thread_id=5exec_time=0error_code=0 SET TIMESTAMP=1354428847/*!*/; DROP TABLE `linux` /* generated by server */ /*!*/; DELIMITER ; # End of log file (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |