本文内容主要来自MySQL官方文档:“MySQL5.1 Reference,2.10.3. 将MySQL数据库拷贝到另一台机器”
注意:参数名与值间可以不用空格,如
-uroot
或
-u root
均可;某些参数会有不同含义
1.
数据库导出(-A导出所有数据库,-B指定数据库,可不写-B直接写数据库名):
mysqldump -uroot -p密码 -B数据库名 -h主机地址(IP) > now.sql
2.
表结构导出(-d,--no-data不导出row):
mysqldump -uroot -p123456 -d -h主机地址(IP) > now.sql
可能遇到的错误:
All tables in the MERGE table are not identically defined when using LOCK TABLES-大意是说某个MERGE引擎的表结构中定义的子表全部不存在,找到该表后drop掉或者重建即可。
mysqldump: Got error: 1017: Can't find file: 'abc' (errno: 2) when using LOCK TABLES-这个可能是某个表的数据库文件被删除了(如MyISAM的表结构文件table.frm不存在但是INFORMATION_SCHEMA中的表名并未删除,导致可以查到该表,但是其表结构数据已经不存在)
3.
在其他服务器创建数据库:
mysqladmin -h
主机地址(IP)
create 要创建的数据库名 -p密码
4. 导出到文件:(需支持管道和gzip,-q指quick导出,不进缓冲区直接导入输出流,默认开启,使用--skip-quick来关闭)
mysqldump -q 数据库名 -p | gzip now.gz
5.
导出到其他服务器:(--opt包含琐表等多项操作,默认开启,使用--skip-opt关闭)
mysqldump --opt -p密码 数据库名 | mysql -h 远程数据库地址(IP) 远程数据库名 -p远程数据库密码
6.
同时导出存储过程:(-R导出存储过程和函数)
mysqldump --opt -p密码 -R -B 数据库名 > functions.sql
7.
单独导出存储过程:(-n指--no-create-db,-t指--no-create-info,分别表示不导出建数据库和建表的语句,其中-n仅在-A导出所有数据库或使用-B指定数据库时才生效)
mysqldump 数据库名 -p密码 -ndtR | mysql -h 远程数据库地址(IP) 远程数据库名 -p远程数据库密码
8.导出到其他服务器报错:
ERROR 1235 (42000) at line 26: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
大意是说MySQL(5.0版)暂不支持在同一操作中导出一张表的多个触发器。
解决办法: 默认不带任何参数的时候 tiggers 值为真,那么我们修改他的值为假,给mysqldump 加上开关: --triggers=false 即可。
9.查看存储过程、函数和触发器的语句:
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS FROM test;
MySQL5.0 - 5.1.20不支持“SHOW CREATE TRIGGER”,于是有大牛分别用函数和视图写了一个等价的方法:
CREATE FUNCTION SHOW_CREATE_TRIGGER(in_trigger varchar(255))
RETURNS text READS SQL DATA
BEGIN
DECLARE returnText text;
SELECT CONCAT_WS(
" ",
"CREATE TRIGGER",
TRIGGER_NAME,
ACTION_TIMING,
EVENT_MANIPULATION,
"ON",
EVENT_OBJECT_TABLE,
"FOR EACH ROW",
ACTION_STATEMENT) into returnText
FROM information_schema.triggers;
RETURN returnText;
END
10.如果不希望导出的数据中包含注释,可以使用“--skip-comments”或“--compact”,后者包含了前者以及其他参数,但还是会有少量信息。使用“mysqldumpl --help”可以看到完整的参数信息。
11.后来发现低版本的mysqldump貌似不支持-R参数:mysqldump --version
mysqldump Ver 10.9 Distrib 4.1.20, for redhat-linux-gnu (i386)
参数说明:
-n: --no-create-db
-d: --no-data
-t: --no-create-info
-R: --routines Dump stored routines (functions and procedures)
Mysqldump是客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建活装载表的SQL语句:
主要参数介绍:
1.连接选项
-u,--user=name
-p,--password=name
-h,--host=name
-P,--port=#
2.输出内容选项
--add-drop-database
--add-drop-table
-n;--no-create-db
-d;--no-data
-t;--no-create-info
3.输出格式选项
--compact
-c --complete-insert
-T(指定数据表中的数据备份为单纯的数据文件和建表SQL两个文件)
注意:xx.sql建表文件是以linux的root用户创建,而xx.txt文件则是一linux的mysql用户创建,因此这两个文件的存放路径一定要保证mysql用户有读写创建文件的权限。
--fields-terminated-by=name(域分隔符)
--fields-enclosed-by=name(域引用符)
--fields-optionally-enclosed-by=name(域引用可选字符)
--fields-escaped-by=name(转义字符)
4.字符集选项
--default--character-set=xx
5.其他选项
-F --flush-logs(备份前刷新日志)
-l --lock-tables(给所有的表加读锁)