mysql自带备份还原工具

mysql自带的mysqldump备份工具,将制定的数据库或表导出都一样的sql文件,以便备份或数据还原,但如果数据量很大,会耗费会很长时间,且锁表。对于大规模备份,考虑使用物理方法,如:mysqlbackup(适于InnoDB、MyISAM及其他表)、mysqlhotcopy(适于MyISAM表)、Xtrabackup(适于InnoDB及MyISAM表)、LVM(适于各类表)等。
一、数据备份
mysqldump常用备份实例
1.导出所有数据库
mysqldump   -uroot  -pabc123  --all-databases > all.sql
2.出整个数据库
mysqldump -u 用户名 -p  数据库名 > 导出的文件名
mysqldump -uroot  -pabc123   test> test.sql
导出整个数据库的表结构 增加-d参数
mysqldump -uroot  -pabc123  -d  test> test.sql
3.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -uroot  -pabc123   test  user> user.sql
导出一个表的表结构。增加-d参数
mysqldump -uroot  -pabc123   -d test  user> user.sql
4.导出部分数据,加上--where参数
mysqldump -uroot  -pabc123  test score --where="score>=60" > score.sql
5.导出一个表的部分字段
mysqldump -uroot  -pabc123  -e "set names 'utf8';select realname,card_number,company_name from Database.name_v where type=2 and status=1" >name_v.sql -p
注:常用参数说明:
--add-drop-database 在CREATE DATABASE前DROP DATABASE
--add-drop-table 在每个create语句之前增加一个drop table
--add-drop-trigger  在CREATE TRIGGER 前DROP TRIGGER
--default-character-set=charset    指定导出数据时采用何种字符集
--disable-keys   在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
--lock-all-tables /-x  提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和 --lock-tables 选项。
 --lock-tables  它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。
--no-create-info /-t  只导出数据,而不添加 CREATE TABLE 语句
--no-data /-d   不导出任何数据,只导出数据库表结构。
--routines /-R  导出存储过程以及自定义函数。
--single-transaction 在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。 
--triggers  同时导出触发器,用 --skip-triggers 禁用它
--events   备份的数据库备份事件
备份 MyISAM 表:
mysqldump   -uroot  -pabc123 --default-character-set=utf8 --opt --extended-insert=false  --triggers -R --hex-blob -x db_name > db_name.sql
备份 Innodb 表:
mysqldump   -uroot  -pabc123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db_name > db_name.sql
实现在线备份,可以使用 --master-data 参数来实现
mysqldump   -uroot  -pabc123  --default-character-set=utf8 --opt --master-data=1  --single-transaction --flush-logs db_name > db_name.sql   
在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。
二、数据还原
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
1. mysql   -uroot  -pabc123  testdb < db.sql
这种方法很容易产生乱码,因为:
a,导出数据库时,你如果忘了设置导出字符集的话,在导入的时候,就有可能会出问题.
b,假如,你导出时设置导出时设置了utf8的编码,但是你又把你的数据库现在的字符集改成了gb2312的.这样又会乱码。
2.用 source 语句
mysql  -uroot  -pabc123
>use testdb ;
>set names utf8;  #这里的字符集根你的将要导入的数据库的字符集一至。
>source db.sql;

参考文章:
发布了404 篇原创文章 · 获赞 205 · 访问量 227万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章