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 语句的开头和结尾增加 ; 和 ; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 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;