使用mysqldump对数据库作备份

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

[[email protected] data]# cd /app/mysql/data/

[[email protected] data]# du -sh

2.9G.

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

[[email protected] 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命令,主从下有用)

如下:

[[email protected] 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/

[[email protected] 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都是在备份文件里有记录的,这个需要记下来

时间: 2024-10-08 00:20:00

使用mysqldump对数据库作备份的相关文章

mysqldump对数据库进行备份导入

导出整个数据库并恢复 # mysqldump -uroot -p123456 -B -A --events -x|gzip>/opt/bak_$(date +%F).sql.gz # ll /opt/bak_$(date +%F).sql.gz 导入整个数据库 # cd /opt/ # gzip -d bak_2015-11-04.sql.gz # mysql -uroot -p123456 <bak_2015-11-04.sql ===============================

MySQL数据库中备份相关的两种工具--mysqlbinlog和mysqldump使用详解

一.mysqldump 对数据库做完整备份命令格式: #mysqldump  -h服务器ip  -u用户名  -p密码备份对象> /dbdir/文件名.sql   说明: 1.不指定路径存储在当前目录下: 2./dbdir需提前创建: 3.文件名要有标识性,备份文件不能重名,否则会覆盖.做计划任务时用date获取日期做文件名: 00 02 * * 1 mysqldump  -hlocalhost -uroot  -p123  --all- databases> /dbdir/db.a-$(da

基于mysqldump实现数据库的逻辑备份

 基于mysqldump实现数据库的逻辑备份 [备份类型] 根据备份时,数据库服务器是否在线: 冷备份:cold backup,服务器要离线,意味着我们的读写操作都不可以进行了,但是服务器离线比较困难. 温备份:warm backup,全局施加共享锁,只可读,不可写的备份叫温备份 热备份:hot backup,数据库不离线,读写操作都可以进行,通常是基于事务的存储引擎才能够完成的 根据备份时的数据集进行分类: 完全备份:full backup:指备份整个库,当下数据集的整个库的数据 部分备份:p

【MYSQL备份】利用mysqldump将一个数据库复制到另一个数据库

假设要将服务器A上的数据库test备份到服务器B 1.在服务器B上新建数据库cp_test mysql> create database cp_test; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cp_test | | mysql | | perfor

mysqldump常用于MySQL数据库逻辑备份

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

mysqldump如何针对某些数据库进行备份?针对某个数据库进行备份?

需求描述: 通过mysqldump工具对mysql服务器中的某几个数据库进行备份. 或者就对其中的一个数据库进行备份. 操作过程: 1.通过--databases参数后面加上数据库的名字进行备份 [[email protected] MysqlDb_Backup]$ mysqldump -uroot -p --single-transaction --master-data --flush-logs --databases top_server test01 > Backup_2018-04-0

使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库

mysql数据库提供了一个很好用的工具mysqldump用以备份数据库,下面将使用mysqldump命令进行备份所有数据库以及指定数据库 一.mysqldump一次性备份所有数据库数据 /usr/local/mysql/bin/mysqldump -u用户名 -p密码 --all-databases > /保存路径/文件名.sql 注意:以上命令直接在控制台输入即可,无须登录进入数据库操作界面 以上命令执行后,你就可以在对应路径下,找到你的备份sql文件了 二.mysqldump 一次性备份指定

分页优化+表锁和库存优化+数据库的备份和导入

一.分页优化技术 代码参看: php/classic.php 把50331651记录进行分页,每页显示2条记录,于是我们用传统php编码方式,编写分页代码如下: 上传到/var/www/html下进行测试,结果如下: 如果访问第1页和第4页,返回语句: 使用explain执行计划查询比较靠前的页数,发觉速度很快因为可以使用上索引: 如果访问第4100000页,返回语句: 使用explain分析结果如下: 发觉这时如果分页到了中间的页数,这时我们既需要排序又要分页检索数据的时候,就会出现Using

mysql 数据库定时备份 增量/全备份

实验楼的 MySQL 数据库需要设计一个自动备份方案,能够每周执行一次全备份,每天执行一次增量备份. 数据库名称为 shiyanlou,管理的用户名为 shiyanlou,密码为 shiyanlou.注意需要先手动启动 MySQL 服务. 目标 设计并实现备份方案,任务完成后满足以下要求: MySQL 服务处于运行状态 需要为服务器中的 shiyanlou 用户设定计划任务 计划任务中设定每周的周一凌晨3点执行一次全备份 计划任务中设定每天凌晨3点执行一次增量备份,周一不执行 请不要编写额外的脚