ITPub博客

首页 > 数据库 > MySQL > 逻辑备份--mysqldump

逻辑备份--mysqldump

原创 MySQL 作者:starive 时间:2014-10-14 10:57:28 0 删除 编辑

逻辑备份--mysqldump

  本博客就逻辑备份做一个较为详细的整理,希望能为各位网友带来技术和知识上的便利。如有任何不足,欢迎博客留言或者站内短信。
详看官方文档 “Chapter 7 Backup and Recovery Types”  7.4 Using mysqldump for Backups

一  备份

1 备份一个数据库

mysqldump -u用户名 -p密码 --opt dbname > filename.sql

Eg:
备份数据库starive2
  1. sudo mysqldump -uroot -p密码 starive2 > /home/*****/mysql/backup/starive2.sql

逻辑备份后文件starive2.sql内容:




备份所有的数据库: ????有问题,没有成功

  1. mysqldump -uroot -p*** -all-database > /home/*****/mysql/backup/alldatabase.sql

错误:
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect

2  备份数据库starive 下的表emp:
  1. sudo mysqldump -uroot -p*** starive emp > /home/*****/mysql/backup/starive_emp.sql

3  备份系统数据库Mysql下的表 db:
  1. sudo mysqldump -uroot -p*** mysql db > /home/*****/mysql/backup/mysql_db.sql


4  How to make a copy a database

sudo mysqldump -uroot -p123 starive > /home/gaoyu/backup/starive.sql

sudo mysql -uroot -p123 starive2 < /home/gaoyu/backup/starive.sql


5  How to copy a database from one server to another

On Server 1:
shell> mysqldump --databases db1 > dump.sql
Copy the dump file from Server 1 to Server 2.

On Server 2:
shell> mysql < dump.sql


6  How to dump stored programs (stored procedures and functions, triggers, and events)
参数如下:

? --events: Dump Event Scheduler events
? --routines: Dump stored procedures and functions
? --triggers: Dump triggers for tables


7  How to dump definitions and data separately

sudo mysqldump -uroot -p123 --no-data starive > /home/gaoyu/backup/starive_defs.sql

sudo mysqldump -uroot -p123 --no-create-info starive > /home/gaoyu/backup/starive_data.sql





二  恢复

恢复分为完全恢复和不完全恢复。(这两者区别可参看博客:http://blog.chinaunix.net/uid-167175-id-3512379.html)

1  完全恢复

To see a listing of all binary log files, use this statement:
mysql> SHOW BINARY LOGS;
To determine the name of the current binary log file, issue the following statement:
mysql> SHOW MASTER STATUS;


语法:

  1. mysql -uroot -p databasename < ***.sql
注意上面备份恢复后数据并不完整,还要将备份后执行的日志进行重做,语法如下:

  1. mysqlbinlog binlog-file | msyql -u root -p databasename


Eg:

自己先把备份与恢复弄清楚。
把 /home/*****/mysql/backup下的 starive2.sql删除掉。
重新备份数据库 starive2


然后往数据库 starive2 里面插入一条记录:
 insert into t1 values(3,'lili');


现在突然发生故障了,数据无法访问。需要恢复备份:
sudo mysql -uroot -p starive2 < /home/*****/mysql/backup/starive2.sql

备份后图片如下:

注意:上面的 第一个”select *from t1;“ 是备份后恢复前的查询结果(备份后新插入了一条记录);第二个 ”select *from t1;“是恢复以后的查询结果


使用msyqlbinlog来恢复子mysqldump备份以来的binlog: 
mysqlbinlog mysql-bin.000001 | mysql -u root -pgao starive2

报错如下:
The program 'mysqlbinlog' is currently not installed.  You can install it by typing:
sudo apt-get install mysql-server-5.5
?????


  2  不完全恢复

2.1 基于时间点恢复

mysqlbinlog --stop-datetime="2005-04-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u root -p

mysqlbinlog --start-datetime="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -p



2.2 基于位置恢复

(1)在shell下执行如下命令:
mysqlbinlog --start-datetime="2005-04-20 9:55:00"  --stop-datetime="2005-04-20 10:05:00"  /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目录创建小的文本文件,编辑此文件,找到出错语句前后的位置号,例如前后位置号分别是 368312和368315

(2)恢复了以前的备份文件后,应从命令行输入下面的内容:
shell> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 | mysql -u root -p
shell> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 | mysql -u root -p


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26435490/viewspace-1298137/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-18

  • 博文量
    143
  • 访问量
    530075