http://blog.chinaunix.net/u/29134/showart_287899.html
前提: 使用mysqldump的用户,必须至少具有SELECT 和 LOCK TABLES的权限。库或者表。
如果要使用--tab开关,还必须有FILE的权限
准备工作:
库以及表:
Table Create Table
------ -----------------------------------------
pwss CREATE TABLE `pwss` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(64) DEFAULT NULL,
`description` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> grant usage on *.* to 'dump_user'@'localhost' identified by 'dump_user';
Query OK, 0 rows affected (0.00 sec)
(这个语句可以省略,因为默认的都有USAGE权限。)
mysql> grant lock tables on *.* to 'dump_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'dump_user'@'localhost';
+-------------------------------------------------------------------------------
-----------------------------------------+
| Grants for dump_user@localhost
|
+-------------------------------------------------------------------------------
-----------------------------------------+
| GRANT LOCK TABLES ON *.* TO 'dump_user'@'localhost' IDENTIFIED BY PASSWORD '*9
E3A8684DFAF643FD3D08D24C0432C0101417D8B' |
+-------------------------------------------------------------------------------
-----------------------------------------+
1 row in set (0.00 sec)
如果您想把整个数据库woshitTest的内容导到一个文件中,可以使用下面的命令:
C:\>mysqldump -udump_user -pdump_user woshitTest > c:\\woshitTestDumpFile.txt(默认的是当前路径,其他的请用完整路径)
这条命令行也可以加上以下开关:
--databases (--all-databases)
如果只是想单独把表 pwSS 导出:
C:\>mysqldump -udump_user -pdump_user woshitTest pwss> c:\\woshitTestDumpFilePwss.txt
如果你想要导出某一条记录的话,带上开关--where="你的SQL语句"
--where="id=1" 或者 -w="id=1"
MYSQLDUMP 还有其他的开关列表如下:
--add-drop-table
这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证IMPORT您的MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除
--add-locks(这个开关我个人不推荐)
这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
实例:
LOCK TABLES `pwss` WRITE;
/*!40000 ALTER TABLE `pwss` DISABLE KEYS */;
INSERT INTO `pwss` VALUES (1,'weiwei','I love this girl');
/*!40000 ALTER TABLE `pwss` ENABLE KEYS */;
UNLOCK TABLES;
-c or - complete_insert
这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。
实例:
INSERT INTO `pwss` (`id`, `username`, `description`) VALUES (1,'weiwei','I love this girl');
--delayed-insert
在INSERT命令中加入DELAY选项
-F or -flush-logs
在执行导出之前将会刷新MySQL服务器的log.
-f or -force
即使有错误发生,仍然继续导出
-l or --lock-tables
导出表的时候服务器将会给表加锁。(同上:--add-locks)
-t or --no-create- info
这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
-d or --no-data
这个选项使的mysqldump命令不创建INSERT语句。
在您只需要DDL语句时,可以使用这个选项。
--opt
此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。(个人推荐。
如果没有使用--opt,MYSQLDUMP就会把整个结果集装载到内存中,然后导出。如果数据非常大就会导致导出失败。这个开关在默认情况下是启用的,如果不想启用它:--skip-opt来关闭它。)
-q or -quick
这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。这个和上面的开关一个意思。
--tab = path
这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为tableName.sql,数据文件被命名为tableName.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
(tableName.txt的结果相当于用select * from tablename into outfile的生成数据)
--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
-C, --compress
如果客户和服务器均支持压缩,压
缩两者间所有的信息。
-e, --extended-insert
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)
-#, --debug[=option_string]
跟踪程序的使用(为了调试)。
--help
显示一条帮助消息并且退出。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。
-pyour_pass, --password[=your_pass]
与服务器连接时使用的口令。如果你不指定"=your_pass"部分,mysqldump需要来自终端的口令。
-P port_num, --port=port_num
与一台主机连接时使用的TCP/IP端口号。(任何系统通用)
-S /path/to/socket, --socket=/path/to/socket
与localhost连接时(它是缺省主机)使用的套接字文件。 (用于linux系统)
-u user_name, --user=userName
与服务器连接时,MySQL使用的用户名。 (LINUX系统缺省的who am i 的结果)
-O var=option, --set-variable var=option
设置一个变量的值。可能的变量被列在下面。
-v, --verbose
冗长模式。打印出程序所做的更多的信息。(也就是详细信息)
-B 开关可以生成CREATE DATABASE语句:
C:\>mysqldump -udump_user -pdump_user -B woshitTest --add-drop-table -c> c:\\1.txt
--tables
这个很有用的一个开关。
用于跳过--databases或者-B开关。该开关后面的所有名字均被认为是表名。
实例:
C:\>mysqldump -udump_user -pdump_user -B woshitTest --tables pwss --add-drop-table -c -R
>> c:\\1.txt
-R
如果要导出存储过程,加 -R开关即可。
实例:
C:\>mysqldump -udump_user -pdump_user woshitTest pwss --add-drop-table -c --tab="c:\\" -
v
-- Connecting to localhost...
-- Retrieving table structure for table pwss...
-- Sending SELECT query...
-- Disconnecting from localhost...
-V, --version
打印版本信息并且退出。
这里只谈了备份,不过恢复是最最主要的:
mysql -udump_user -pdump_user woshittest< 1.txt
将数据库、数据表导成一个个 SQL语句形式的文件。
--no-create-info,-t
只导出数据,而不添加 CREATE TABLE语句。
例:[root@10 shell]# mysqldump --no-create-info wang_db >/home/shell/wang_db.sql
--no-data,-d
不导出任何数据,只导出数据库表结构。
[root@10 shell]# mysqldump --no-data wang_db >/home/shell/wang.db.sql.1
导出完整的数据(包括表的结构和数据)
[root@10 shell]# mysqldump wang_db >/home/shell/wang.db.sql.2
单独导入某个表
[root@10 shell]# mysqldump --add-drop-table wang_db wang_tb >/home/shell/wang.db.sql.3
在生产系统导出数据注意点:对一个正在运行的数据库进行备份请慎重!!
如果一定要在服务运行期间备份,请添加 -skip-opt选项,类似执行:
/usr/local/mysql/bin/mysqldump --skip-opt -uroot -p123456 mysqlfxv >mySQL.SQL
以免造成了锁表。