忘记密码
在“my.cnf”或“my.ini”文件的“mysqld”配置段添加“skip-grant-tables”,然后重新启动mysql即可登录修改root密码。
开启root权限
GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
注意:root没有引号,IP地址也没有引号。血的教训。
mysqldump -uroot -p123456 --add-drop-database -P12400 --databases mydatabase> dbbak.sql
mysqldump -uroot -p123456 --add-drop-database -P12490 --databases blackhole | gzip > /opt/resource/database_`date '+%m-%d-%Y'`.sql.gz
mysqldump -uroot -p123456 --add-drop-database -P12400 --databases blackhole | mysql --host=192.168.127.161 -C blackhole -p123456 -P12400
此备份脚本前提是做好了192.168.1.161的ssh免密码自动登录
#!/bin/bash
filename=database_`date '+%m-%d-%Y'`.sql.gz
#下面这一行是删除/opt/dbbackup/目录下30天前的备份文件
find /opt/dbbackup -type f -mtime +30 -exec rm -f {} \;
mysqldump -uroot -p123456 --add-drop-database -P12499 --databases blackhole | gzip > /opt/dbbackup/$filename
sftp 192.168.1.161 <<- FTP_MARK 1>acclog 2>&1
cd /opt/dbbackup
lcd /opt/dbbackup
put $filename
quit
FTP_MARK
基本的使用方法总结:
1 导出所有库
系统命令行
mysqldump -uusername -ppassword --all-databases > all.sql
2 导入所有库
mysql命令行
mysql>source all.sql;
3 导出某些库
系统命令行
mysqldump -uusername -ppassword --databases db1 db2 > db1db2.sql
4 导入某些库
mysql命令行
mysql>source db1db2.sql;
5 导入某个库
系统命令行
mysql -uusername -ppassword db1 < db1.sql;
或mysql命令行
mysql>source db1.sql;
6 导出某些数据表
系统命令行
mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql
7 导入某些数据表
系统命令行
mysql -uusername -ppassword db1 < tb1tb2.sql
或mysql命令行
mysql>
user db1;
source tb1tb2.sql;
8 mysqldump字符集设置
mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql
mysqldump远不止上述那么简单,还可以设置更多的条件如:条件导出、仅导出结构信息、锁定等等,更详细的使用方法见王伟的博客http://wangwei007.blog.51cto.com/68019/980586 非常感谢作者的整理,下面拷贝来做个备份吧!
================================================
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wangwei007.blog.51cto.com/68019/980586
mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。
如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。
有3种方式来调用mysqldump:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database
如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。
要想获得你的版本的mysqldump支持的选项,执行mysqldump ---help。
如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用--skip-opt禁用。
如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用--opt或-e选项。
mysqldump支持下面的选项:
・ ---help,-?
显示帮助消息并退出。
・ --add-drop--database
在每个CREATE DATABASE语句前添加DROP DATABASE语句。
・ --add-drop-tables
在每个CREATE TABLE语句前添加DROP TABLE语句。
・ --add-locking
用LOCK TABLES和UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。
・ --all--database,-A
转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。
・ --allow-keywords
允许创建关键字列名。应在每个列名前面加上表名前缀。
・ ---comments[={0|1}]
如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。--skip―comments与---comments=0的结果相同。 默认值为1,即包括额外信息。
・ --compact
产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking选项。
・ --compatible=name
产生与其它数据库系统或旧的MySQL服务器更兼容的输出。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用几个值,用逗号将它们隔开。这些值与设置服务器SQL模式的相应选项有相同的含义。
该选项不能保证同其它服务器之间的兼容性。它只启用那些目前能够使转储输出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle类型或使用Oracle注释语法的数据类型。
・ --complete-insert,-c
使用包括列名的完整的INSERT语句。
・ --compress,-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。
・ --create-option
在CREATE TABLE语句中包括所有MySQL表选项。
・ ---database,-B
转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。
・ ---debug[=debug_options],-# [debug_options]
写调试日志。debug_options字符串通常为'd:t:o,file_name'。
・ --default-character-set=charset
使用charsetas默认字符集。如果没有指定,mysqldump使用utf8。
・ --delayed-insert
使用INSERT DELAYED语句插入行。
・ --delete-master-logs
在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用--master-data。
・ --disable-keys,-K
对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表。
・ --extended-insert,-e
使用包括几个VALUES列表的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入。
・ --fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--行-terminated-by=...
这些选项结合-T选项使用,与LOAD DATA INFILE的相应子句有相同的含义。
・ --first-slave,-x
不赞成使用,现在重新命名为--lock-all-tables。
・ --flush-logs,-F
开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用--lock-all-tables或--master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。
・ --force,-f
在表转储过程中,即使出现SQL错误也继续。
・ --host=host_name,-h host_name
从给定主机的MySQL服务器转储数据。默认主机是localhost。
・ --hex-blob
使用十六进制符号转储二进制字符串列(例如,'abc' 变为0x616263)。影响到的列有BINARY、VARBINARY、BLOB。
・ --lock-all-tables,-x
所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭--single-transaction和--lock-tables。
・ --lock-tables,-l
开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表。
请注意当转储多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证转储文件中的表在数据库之间的逻辑一致性。不同数据库表的转储状态可以完全不同。
・ --master-data[=value]
该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。
--master-data选项启用--lock-all-tables,除非还指定--single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又见--single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭--lock-tables。
・ --no-create-db,-n
该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给出---database或--all--database选项,则包含到输出中。
・ --no-create-info,-t
不写重新创建每个转储表的CREATE TABLE语句。
・ --no-data,-d
不写表的任何行信息。如果你只想转储表的结构这很有用。
・ --opt
该选项是速记;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用--skip-opt禁用。要想只禁用确信用-opt启用的选项,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。
・ --password[=password],-p[password]
连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了--password或-p选项后面的 密码值,将提示你输入一个。
・ --port=port_num,-P port_num
用于连接的TCP/IP端口号。
・ --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议。
・ --quick,-q
该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。
・ --quote-names,-Q
用‘`’字符引用数据库、表和列名。如果服务器SQL模式包括ANSI_QUOTES选项,用‘"’字符引用名。默认启用该选项。可以用--skip-quote-names禁用,但该选项应跟在其它选项后面,例如可以启用--quote-names的--compatible。
・ --result-file=file,-r file
将输出转向给定的文件。该选项应用在Windows中,因为它禁止将新行‘\n’字符转换为‘\r\n’回车、返回/新行序列。
・ --routines,-R
在转储的数据库中转储存储程序(函数和程序)。使用---routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间。
如果你需要创建的子程序使用原来的定义者和时间戳属性,不使用--routines。相反,使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysql.proc表的内容。
该选项在MySQL 5.1.2中添加进来。在此之前,存储程序不转储。
・ --set-charset
将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用--skip-set-charset。
・ --single-transaction
该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。
当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。
--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。
要想转储大的表,应结合--quick使用该选项。
・ --socket=path,-S path
当连接localhost(为默认主机)时使用的套接字文件。
・ --skip--comments
参见---comments选项的描述。
・ --tab=path,-T path
产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。
默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。
注释:该选项只适用于mysqldump与mysqld服务器在同一台机器上运行时。你必须具有FILE权限,并且服务器必须有在你指定的目录中有写文件的许可。
・ --tables
覆盖---database或-B选项。选项后面的所有参量被看作表名。
・ --triggers
为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它。
・ --tz-utc
在转储文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载。(不使用该选项,TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载)。--tz-utc也可以保护由于夏令时带来的更改。--tz-utc默认启用。要想禁用它,使用--skip-tz-utc。该选项在MySQL 5.1.2中加入。
・ --user=user_name,-u user_name
连接服务器时使用的MySQL用户名。
・ --verbose,-v
冗长模式。打印出程序操作的详细信息。
・ --version,-V
显示版本信息并退出。
・ --where='where-condition', -w 'where-condition'
只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。
例如:
"--where=user='jimf'"
"-wuserid>1"
"-wuserid<1"
・ --xml,-X
将转储输出写成XML。
还可以使用--var_name=value选项设置下面的变量:
・ max_allowed_packet
客户端/服务器之间通信的缓存区的最大大小。最大为1GB。
・ net_buffer_length
客户端/服务器之间通信的缓存区的初始大小。当创建多行插入语句时(如同使用选项--extended-insert或--opt),mysqldump创建长度达net_buffer_length的行。如果增加该变量,还应确保在MySQL服务器中的net_buffer_length变量至少这么大。
还可以使用--set-variable=var_name=value或-O var_name=value语法设置变量。然而,现在不赞成使用该语法。
mysqldump最常用于备份一个整个的数据库:
shell> mysqldump --opt db_name > backup-file.sql
你可以这样将转储文件读回到服务器:
shell> mysql db_name < backup-file.sql
或者为:
shell> mysql -e "source /path-to--backup/backup-file.sql" db_name
mysqldump也可用于从一个MySQL服务器向另一个服务器复制数据时装载数据库:
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
可以用一个命令转储几个数据库:
shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql
如果你想要转储所有数据库,使用--all--database选项:
shell> mysqldump --all-databases > all_databases.sql
如果表保存在InnoDB存储引擎中,mysqldump提供了一种联机备份的途径(参见下面的命令)。该备份只需要在开始转储时对所有表进行全局读锁定(使用FLUSH TABLES WITH READ LOCK)。获得锁定后,读取二进制日志的相应内容并将锁释放。因此如果并且只有当发出FLUSH...时正执行一个长的更新语句,MySQL服务器才停止直到长语句结束,然后转储则释放锁。因此如果MySQL服务器只接收到短("短执行时间")的更新语句,即使有大量的语句,也不会注意到锁期间。
shell> mysqldump --all-databases --single-transaction > all_databases.sql
对于点对点恢复(也称为“前滚”,当你需要恢复旧的备份并重放该备份以后的更改时),循环二进制日志或至少知道转储对应的二进制日志内容很有用:
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
或
shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
如果表保存在InnoDB存储引擎中,同时使用--master-data和--single-transaction提供了一个很方便的方式来进行适合点对点恢复的联机备份。
1、各种用法说明
A. 最简单的用法:
mysqldump -uroot -pPassword [database name]
> [dump file]
上述命令将指定数据库备份到某dump文件(转储文件)中,比如:
mysqldump -uroot -p123 test > test.dump
生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句。
B. --opt
如果加上--opt参数则生成的dump文件中稍有不同:
. 建表语句包含drop table if exists tableName
. insert之前包含一个锁表语句lock tables tableName write,insert之后包含unlock tables
C. 跨主机备份
使用下面的命令可以将host1上的sourceDb复制到host2的targetDb,前提是host2主机上已经创建targetDb数据库:
mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb
-C指示主机间的数据传输使用数据压缩
D. 只备份表结构
mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump
将只备份表结构。--databases指示主机上要备份的数据库。如果要备份某个MySQL主机上的所有数据库可以使用--all-databases选项,如下:
mysqldump --all-databases
> test.dump
E. 从备份文件恢复数据库
mysql [database name] < [backup file name]
2、结合Linux的cron命令实现定时备份
比如需要在每天凌晨1:30备份某个主机上的所有数据库并压缩dump文件为gz格式,那么可在/etc/crontab配置文件中加入下面代码行:
30 1 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz
前面5个参数分别表示分钟、小时、日、月、年,星号表示任意。date '+%m-%d-%Y'得到当前日期的MM-DD-YYYY格式。
3、一个完整的Shell脚本备份MySQL数据库示例
#vi /backup/backup.sh
#!bin/bash
cd /backup
echo "You are in backup dir"
mv backup* /oldbackup
echo "Old dbs are moved to oldbackup folder"
File = backup-$Now.sql
mysqldump -u user -p password database-name > $File
echo "Your database backup successfully completed"
上面脚本文件保存为backup.sh,并且系统中已经创建两个目录/olcbackup和/backup。每次执行backup.sh时都会先将/backup目录下所有名称为backup开头的文件移到/oldbackup目录。
为上述脚本制定执行计划如下:
#crontab -e
30 1 * * * /backup.sh
4、mysqldump全量备份+mysqlbinlog二进制日志增量备份
从mysqldump备份文件恢复数据会丢失掉从备份点开始的更新数据,所以还需要结合mysqlbinlog二进制日志增量备份。确保my.ini或者my.cnf中包含下面的配置以启用二进制日志,或者mysqld ---log-bin:
[mysqld]
log-bin=mysql-bin
mysqldump命令必须带上--flush-logs选项以生成新的二进制日志文件:
mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql
这样生成的增量二进制日志文件比如为mysql-bin.000003,那么恢复数据时如下:
shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql
shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd
此外mysqlbinlog还可以指定--start-date、--stop-date、--start-position和--stop-position参数,用于精确恢复数据到某个时刻之前或者跳过中间某个出问题时间段恢复数据,直接摘录MySQL文档说明中相关内容如下:
5.9.3.1. 指定恢复时间
对于MySQL 4.1.4,可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2005年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。
5.9.3.2. 指定恢复位置
也可以不指定日期和时间,而使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。
数据库的基本导入\导出的命令 是 mysqldump 和 source 在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是用命令行 另一个是用phpmyadmin
先来说说phpmyadmin 这个工具导出和导入很简单 而且导入时无需建库 直接还原成原来的数据库 用source 也可以还原 但他导入文件时有大小限制不能超过2M 再来说说 mysqldump 和 source 用命令操作很快 但是想把导出的文件再导入时必须先建立一个数据库(这个库可以随便起名) 然后进入数据库后才能导入用phpmyadmin导入mysqldump 导出的文件也得需要这步
下面是从前辈那copy来的命令具体使用方法 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导出一个数据库结构 mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
备忘: mysqldump在linux下可直接使用 在windows下有时需要进入mysql/bin中使用 因为有时用的是类似appserv的套装软件 这样的话命令就不能直接使用 因为这些命令没在环境变量的目录里 而且用mysqldump导出的备份 必须先建立数据库才能导入
4.导入数据库 常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source d:wcnc_db.sql
存疑: phpmyadmin导入有大小限制 不知道source导入时有没限制 而且导出时是不可以限制文件大小 并且分数个文件导出
mysqldump是备份mysql数据库的一种好工具。它相对于用phpmyadmin等备份工具更加快速,又避免受php.ini等的限制,在windows系统下还可以结合计划任务实现定时远程备份数据库。操作用mysqldump备份数据库的用户需要的权限比较小,只需要select和lock table的权限就足够了。所以可以创建一个备份数据库的用户,专门用于备份数据库,这样可以避免数据库受到意外的破坏。在备份数据库之前我们要做足准备功夫,首先创建了执行备份操作的数据库用户――backup,密码为:123456。其次,确定我们要备份哪个数据库,放在哪里。然后,确定数据库的备份文件要放到哪里。
假设我们的任务是要备份一个位于192.168.1.2服务器上,名称为backup_test的数据库,并把备份文件放到D:\bak\的文件夹中。又假设我们的操作系统为windows xp,于是我们可以用以下的方法执行备份操作:我们可以使用windows自带的命令提示符(调用命令提示符的方法有多种,最常用的就是点击开始菜单,选择“运行”,输入cmd的命令就可以启动了),在命令提示符中输入以下命令:
mysqldump -ubackup -p123456 -h 192.168.1.2 backup_test > D:\bak\bakcup.sql在这段命令中:mysqldump 是myqldump的程序名了;
-u 是数据库的用户名,后面紧跟着用户名backup;-p 是数据库的密码,后面同样紧跟着密码,注意是-p和密码之间不能有空格;-h 是数据库的地址,如果没有此项表明是备份本地的数据库;backup_test 要备份的数据库名称;
> 表明该数据库备份到后面的文件,紧跟当然是备份文件的地址了,注意要用绝对文件路径,文件的后缀也可以用.txt。一旦执行该命令后,mysqldump立即执行备份操作。远程备份数据库要似乎网络的情况,一般远程备份需要一定的时间的。
=======================================备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
备份MySQL数据库为带删除表的格式 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。mysqldump -�add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz备份MySQL数据库某个(些)表mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同时备份多个MySQL数据库mysqldump -hhostname -uusername -ppassword �databases databasename1 databasename2 databasename3 > multibackupfile.sql
仅仅备份数据库结构mysqldump �no-data �databases databasename1 databasename2 databasename3 > structurebackupfile.sql
备份服务器上所有数据库mysqldump �all-databases > allbackupfile.sql
还原MySQL数据库的命令mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
将数据库转移到新服务器mysqldump -uusername -ppassword databasename | mysql �host=*.*.*.* -C databasename======================================================这种更灵活,导出 select * from table_name into outfile 'c:\\path\\filename.txt ' 导入:LOAD DATA LOCAL INFILE 'file_name.txt' INTO TABLE tbl_name
执行SQl脚本:
第一种方式:在未连接数据库的情况下,输入 MySQL -h localhost -u root -p 123456 < d:\book.sql 回车即可;
第二种方式:在已连接数据库的情况下,此时命令提示符为mysql>,输入 source d:\book.sql 或者 \. d:\book.sql 回车即可。