码迷,mamicode.com
首页 > 数据库 > 详细

使用mysqldump对数据库作备份

时间:2015-04-15 23:37:10      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:mysqldump



经理提出要求:对线上测试环境的mysql的所有数据库作备份


[root@BJVM-CM-94 data]# cd /app/mysql/data/

[root@BJVM-CM-94 data]# du -sh

2.9G.

经查看数据只有2.9G,数据容量不是很大,所以我选择了使用mysqldump进行备份

[root@www ftp.scj.com]# ps -ef | grep mysql

root      5642  1211 20 11:16 pts/0    00:00:00 grep mysql

root     29558     1  0 Apr14 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/mysql/data --pid-file=/opt/mysql/data/www.scj.com.pid

mysql    29758 29558  0 Apr14 pts/1    00:00:18 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/opt/mysql/data/www.scj.com.pid --socket=/var/lib/mysql/mysql.sock


要求:每天凌晨1点完整备份一次

      保留一周的备份数据

      使用二进制日志文件进行备份之后数据的恢复



备份步骤:

  1. 修改mysql的配置文件:

    开启二进制日志文件

    vi /usr/local/mysql/my.cnf

    在[mysqld]下面添加一行:

    log-bin=/opt/mysql/binlog/mysql-binlog           (把二进制日志文件单独放到一个目录下)    

  2. 创建备份目录和二进制日志目录:

    mkdir -p /opt/mysql/{backup,binlog}

    cd /opt/mysql/


    chown -R mysql.mysql backup binlog                (修改权限)

    重启mysql服务: /etc/init.d/mysqld reload

  3. 使用mysqldump作完整备份:

    备份除了Database|information_schema|mysql|test|performance_schema这几个库之外的所有库,使用--databases参数,切记

    mysql -u root -p123456 -e "show databases" | grep -Ev "Database|information_schema|mysql|test|performance_schema" |xargs mysqldump -uroot -p123456 --lock-all-tables --routines --events --triggers --master-data=2 --flush-logs --add-drop-database --add-drop-table --databases > /opt/mysql/backup/mysql_full_`date +%F-%H-%M-%S`.sql

-u                        #指定用户名

-p                        #指定用户密码

-h                        #指定主机地址

-A|--all-databases        #备份所有数据库

--databases               #备份指定数据库

--single-transcation      #基于此项可以实现对InnoDB表做热备份,但不需要使用

--lock-all-tables         #执行备份时为所有表请求加锁

-E|--events               #备份事件调度器代码

--opt                     #同时启动各种高级选项

-R|--routines             #备份存储过程和存储函数

--flush-logs              #备份之前刷新日志

--triggers                #备份触发器

--master-data=2           #该选项将会记录binlog的日志位置与文件名并追加到备份文件中,(如果为1将会输出CHANGE MASTER命令,主从下有用)

如下:

[root@www backup]# less mysql_full_2015-04-15-11-54-07.sql 

里面有一行:

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-binlog.000002‘, MASTER_LOG_POS=120;

备份后生成的二进制日志文件名及pos信号,之后所有的操作都将从120开始,记录到mysql-binlog.000002






恢复步骤:

假如,某一时刻工作人员误操作,执行了一个drop操作:

恢复开始:


首先使用完全备份文件恢复到备份时的数据:

cd /opt/mysql/data

把除了information_schema|mysql|test|performance_schema这几个库之外的所有库,都临时移到一个目录里:

mv db_act db_ad db_admin db_as_s1 db_caiwu db_cm_s0 db_cm_s1 db_cm_s2 db_cm_s3 db_csw db_dabao db_device db_game db_game_info db_he_s1 db_market db_opauth db_pay db_sdk_game db_sdk_market db_sdk_online db_sdk_pay db_sdk_snapshot db_sdk_tongji db_sdk_user db_site db_stat db_stat_log db_user db_webauth dss_gc sdk_stat_log website /tmp/mysql/lishi

找到完全备份的文件:

cd /opt/mysql/backup

mysql -uroot -p123456 < mysql_full_2015-04-15-13-36-50.sql


然后使用二进制日志文件恢复到执行drop时的数据:

cd /opt/mysql/binlog/

[root@www binlog]# mysqlbinlog mysql-binlog.000002 |less

# at 965

#150415 12:04:27 server id 1  end_log_pos 1060 CRC32 0xd681bd27         Query   thread_id=2     exec_time=1     error_code=0

SET TIMESTAMP=1429113867/*!*/;

drop database allen

/*!*/;

DELIMITER ;

找到执行drop的那个位置,如上,发现执行drop前的pos信号是965

使用mysqlbinlog 开始恢复:

mysqlbinlog --start-position=120 --stop-position=965 mysql-binlog.000002 |mysql -uroot -p123456

注意:pos信号120和日志文件名000002都是在备份文件里有记录的,这个需要记下来
















本文出自 “” 博客,请务必保留此出处http://732233048.blog.51cto.com/9323668/1633051

使用mysqldump对数据库作备份

标签:mysqldump

原文地址:http://732233048.blog.51cto.com/9323668/1633051

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!