MySQL中备份数据库的命令是

在MySQL中,备份数据库的命令是什么?

使用mysqldump工具进行备份:

all.sql(2)备份测试数据库$mysqldump-uroot-ptest>测试。
sql(3)备份test数据库下的表emp$mysqldump-uroot-ptestemp>emp.sql(4)备份test数据库下的表emp和dept$mysqldump-uroot-ptestempdept>emp_dept.sql

实现MySQL数据库的备份与还原的几种方法

MyISAM表以文件的形式存储,因此可以使用上面列出的一些方法相对轻松地备份它们。
Innodb中的所有表都存储在同一个数据文件ibdata1中(可以是多个文件,也可以是单独的表空间文件)。
可以通过复制数据文件并备份binlog来备份,或者使用mysqldump来备份。
1.使用常见实用程序(例如cp、tar、cpio等)进行直接复制数据库备份。
如果使用直接备份方法,必须确保该表未被使用。
如果服务器在复制表时修改了表,则复制就变得毫无意义。
确保副本一致性的最佳方法是关闭服务器,复制文件,然后重新启动服务器。
如果您不想关闭服务器,请在表检查运行时锁定它。
如果服务器正在运行,则相同的限制适用于复制文件,并且必须使用相同的锁定协议来“停止”服务器。
MySQL数据库备份完成后,您必须重新启动服务器(如果您将其关闭)或释放对表施加的所有锁定(如果您让服务器保持运行状态)。
要使用直接复制文件将数据库从一台计算机复制到另一台计算机,只需将文件复制到另一台服务器主机上的相应数据目录即可。
确保文件为MyIASM格式或两台计算机具有相同的硬件结构。
否则,您的数据库将在其他机器上包含奇怪的内容。
您还必须确保在安装数据库表时另一台计算机上的服务器不会访问它们。
2.使用mysqldump数据库备份。
mysqldump采用SQL级别的备份机制,比较适合不同MySQL版本之间的升级。
尽管mysqldump程序需要一些时间来备份数据库,但它生成的文本文件很容易移植。
mysqldump的一些主要参数:1)--compatibility=name这告诉mysqldump导出的数据与哪些数据库或旧版本的MySQL服务器兼容。
值可以包括ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options。
要使用多个值,请用逗号分隔它们。
当然,我们不能保证完全兼容,但我们会尽力保持兼容性。
2)--complete-insert,-c使用完整INSERT方法导出数据,包括字段名称。
即将所有值写在一行上。
这样做可以提高插入效率,但会受到max_allowed_pa​​cket参数的影响,可能会导致插入错误。
因此,这个参数要谨慎使用,至少我不推荐使用。
3)--default-character-set=charset指定导出数据时使用的字符集。
如果您的数据表不使用默认的latin1字符集,则在导出时必须指定该选项。
否则导入后会出现乱码。
又来数据了4)--disable-keys告诉mysqldump在INSERT语句的开头和结尾添加and;语句。
这显着加快了插入语句的速度,因为索引是在插入所有数据后重建的。
该选项仅适用于MyISAM表。
5)--extended-insert=true|false默认情况下,mysqldump开启--complete-insert模式,因此如果您不想使用此选项,请使用此选项并将其值设置为false。
6)--hex-blob使用十六进制格式导出二进制字符串字段。
如果您有二进制数据,则应该使用此选项。
受影响的字段类型为BINARY、VARBINARY和BLOB。
7)--lock-all-tables,-x发送请求锁定所有数据库中的所有表,以在开始导出之前确保数据一致性。
这是全局读锁,并且--single-transaction和--lock-tables选项会自动关闭。
8)--lock-tables与--lock-all-tables类似,但锁定当前导出的数据表,而不是一次性锁定数据库中的所有表。
此选项仅适用于MyISAM表。
对于Innodb表,您可以使用--single-transaction选项。
9)--no-create-info,-t只导出数据,不添加任何CREATETABLE语句。
10)--no-data,-d不导出数据,只导出数据库表结构。
11)--opt这只是一个快捷选项,相当于同时添加--add-drop-tables--add-locking--create-option--disable-keys--extended-insert--lo。
是。
时间ck-tables--quick--set-charset选项。
该选项允许mysqldump快速导出数据并快速将导出的数据导回。
该选项默认启用,但可以使用--skip-opt禁用。
请注意,运行不带--quick或--opt选项的mysqldump会将整个结果集放入内存中。
导出大型数据库可能会导致问题。
12)--quick,-q该选项在导出大型表时很有用。
这导致mysqldump从服务器查询记录并直接输出,而不是在检索所有记录后将它们缓存在内存中。
13)--routines,-R导出存储过程和自定义函数。
14)--single-transaction该选项在导出数据之前使用。
提交BEGINSQL语句。
BEGIN不会阻塞应用程序并确保导出期间数据库的状态一致。
仅适用于事务表,例如InnoDB和BDB。
此选项和​​--lock-tables选项是互斥的,因为LOCKTABLES隐式提交挂起的事务。
要导出大表,必须结合使用--quick选项。
--triggers还导出触发器。
该选项默认启用,但可以使用--skip-triggers禁用。
备份:使用mysqldump备份数据库实际上会将数据库转储到一系列CREATETABLE和INSERT语句中,通过这些语句您可以重新生成数据库。
以下是如何使用mysqldump:%mysqldump--opttestdb|gzip>/data/backup/testdb.bak#--opt选项优化转储过程,从而产生更小的备份文件和更小的后续管道操作。
处理数据压缩%mysqldump--opttestdbmytable1,mytable2|gzip>/data/backup/testdb_mytable.bak#可以在数据库后追加数据表名,只导出指定数据表。
多个数据表可以用逗号分隔。
您还可以启用--opt选项。
drop-table选项在备份文件中的每个CREATETABLE之前添加DROPTABLEIFEXISTS语句。
这使您可以轻松更新数据表,而不会遇到“数据表已存在”错误。
您还可以使用mysqldump命令将数据库直接传输到另一台服务器,而不生成备份文件。
重复运行时,远程数据库会定期更新。
%mysqladmin-hremote_hostcreatetestdb%mysqldump--opttestdb|mysql-hremote_hosttestdb还可以通过SSH远程调用服务器上的程序,如:_hostmysqladmincreatetestdb%mysqldump--opttestdb|sshremote_hostmysqltestdb备份时直接复制系统文件来备份数据库。
防止数据库被修改。
最好的方法是关闭服务器。
如果无法关闭,请尝试以只读模式锁定关联的数据表。
以下是一些示例:%cp-rdb/backup/db#db将数据库备份到/backup/db目录%cptable_name.*/backup/db#table_name仅备份数据表%scp-rdbremotehot:/usr/local/mysql/data#使用scp将数据库直接复制到远程服务器。
注意,如果直接将数据库复制到远程主机,则两台机器的硬件结构必须相同或完全复制。
数据表便携式数据表类型。
或/usr/local/mysql/bin/mysqldump-uroot-proot\--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob-xtestdb>testdb.sql使用以下SQL备份Innodb表:/usr/local/mysql/bin/mysqldump-uroot-proot\--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob--single-transactiontestdb>testdb.sql另外,在线如果要实现备份,也可以使用--master-data参数,如下所示:/usr/local/mysql/bin/mysqldump-uroot-proot\--default-charset=utf8--opt--master-data=1\--single-transaction--flush-logstestdb>testdb.sql首先请求只锁表,然后二进制更新日志并向导出的文件添加CHANGEMASTER语句以指定当前备份的二进制日志位置。
您可以使用此方法将此文件恢复到从站。
恢复:mysqldump备份的文件是SQL脚本,导入数据的方式有两种。
直接使用mysql客户端(例如:/usr/local/mysql/bin/mysql-uroot-proottestdb其实这并不是标准的SQL语法,而是mysql提供的一个函数。
客户端,例如:SOURCE/tmp/testdb.sql;这里必须指定文件的绝对路径,并且必须是运行mysqld的用户(例如everyone)有读取权限的文件。
3.使用mysqlhotcopy数据库备份使用mysqlhotcopy工具,这是一个PerlDBI脚本,允许您在不关闭服务器的情况下备份数据库。
mysqlhotcopy是一个PERL程序,最初由TimBunce编写。
使用LOCKTABLES、FLUSHTABLES以及cp或scp快速备份数据库。
这是备份数据库或单个表的最快方式,但只能在数据库文件(包括数据表定义文件、数据文件和索引文件)所在的机器上运行。
mysqlhotcopy只能用于备份MyISAM,并且只能在基于Unix和NetWare的系统上运行。
它的主要优点是它比mysqldump更快,因为它直接复制文件。
备份时数据锁定自动完成,无需停止服务器。
您可以更新日志并同步备份文件和日志文件的检查点。
备份:mysqlhotcopy支持一次复制多个数据库,还支持正则表达式。
以下是一些示例:/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb/tmp(将数据库目录testdb复制到/tmp)/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb_1testdb_2testdb_n/tmp/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb./regex//tmp恢复:Mysqlhotcopy是一个数据库备份整个目录。
如果使用这个,可以直接将其复制到mysqld中指定的datadir(这里是/usr/local/mysql/data/)。
同时,您还应该注意权限。
出现问题,如下例:cp-rftestdb/usr/local/mysql/data/chown-Rnobody:nobody/usr/local/mysql/data/(将testdb目录的所有者更改为mysqld运行的用户)4.SQL语句数据库使用BACKUPTABLE语法进行备份实际上类似于mysqlhotcopy的工作方式,两者都被锁定。
接下来,复制数据文件。
虽然可以实现在线备份,但效果并不理想,不推荐。
恢复较慢,因为只复制表结构文件和数据文件,没有同时复制索引文件。
备份:BACKTABLEtbl_testTO'/tmp/testdb/';#tbl_test将数据库备份到/tmp/testdb/目录时,会自动创建testdb目录。
运行此语句需要FILE和SELECT权限。
这些表(备份目录)也必须可由服务器写入。
运行该语句时,首先将内存中的数据写入磁盘,然后将每个数据表的.frm(表结构定义文件)和.MYD(数据)文件从数据目录移动到备份目录。
.MYI(索引)文件不会被复制,因为它可以用其他两个文件重建。
备份BACKUPTABLE语句会按顺序锁定数据表。
同时备份多个数据表可能会导致数据表发生变化。
因此,当备份0完成时,备份文件中的数据和数据都会被修改。
您当前的数据表可能有所不同。
要解决此差异,请将数据表锁定为只读模式,并在备份完成后将其解锁。
例如:mysql>LOCKTABLEStb1READ,tb2READ;mysql>BACKUPTABLEtb1,tb2TO'backup/db';mysql>UNLOCKTABLES;使用BACKUPTABLE语句备份的数据表可以使用RESTORETABLE重新加载到服务器。
请注意,您需要FILE权限才能运行此SQL,并且为了避免安全问题,导出的文件不能覆盖现有文件。
SELECTINTOOUTFILE将数据导出到常规文本文件。
您可以自定义字段间距以方便处理这些数据。
示例:SELECT*INTOOUTFILE'/tmp/testdb/tbl_test.txt'FROMtbl_test;您必须具有FILE权限才能运行此SQL,并且导出的文件/tmp/testdb/tbl_test.txt必须是可写的。
为了避免文件安全问题,现有文件不能被覆盖。
恢复:对于使用BACKUPTABLE方法备份的文件,可以通过RESTORETABLE语句恢复数据表。
示例:RESTORETABLEFROM'/tmp/testdb/';权限要求同上。
对于使用SELECTINTOOUTFILE方法备份的文件,您可以通过运行LOADDATAINFILE语句来恢复数据表。
示例:LOADDATAINFILE'/tmp/testdb/tbl_name.txt'INTOTABLEtbl_name;权限要求同上。
导入数据前,数据表必须已存在。
知道了。

MYSQL通过SQL语句备份数据表的问题CREATETABLEIFNOTEXISTS

添加您备份的insertintodb_table_1selectFROMdb_table_2WHERE1=1ANDdatetimeBETWEENdate1ANDdate2。

浅谈MySQL数据库备份的几种方法

mysql常见的备份方式有:mysqldump、mysqlhotcopy、BACKUPTABLE、SELECTINTOOUTFILE或备份二进制日志(binlog),或者直接复制数据文件和相关配置文件。
MyISAM表以文件的形式存储,因此备份相对容易。
可以使用上面提到的几种方法。
Innodb中的所有表都存储在同一个数据文件ibdata1中(可以有多个文件,也可以是独立的表空间文件),备份起来相对困难。
免费的解决方案可以是复制数据文件和备份binlog。
1.mysqldump备份mysqldump采用SQL级别的备份机制。
它将数据表导出到SQL脚本文件。
这也是最常用的备份方法。
示例:mysqldump-uroot-pdatabasetable>/home/jobs/back.sqlmmysqldump还可以用于增量备份。
网上有很多mysqldump相关的参数,这里不再赘述【如果是mysql企业版的话可以使用。
mysqlbackup当然是收费的]mysqlhotcopy是一个PERL程序。
它使用LOCKTABLES、FLUSHTABLES和cp或scp来快速备份数据库。
它是备份数据库或单个表的最快方式,但只能在数据库文件(包括数据表定义文件、数据文件和索引文件)所在的机器上运行。
mysqlhotcopy只能用于备份MyISAM,并且只能运行在类Unix和NetWare系统上。
mysqlhotcopy支持一次复制多个数据库,还支持正则表达式。
示例:root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456database/tmp(复制数据库目录database到/tmp)root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456db_name_1...db_name_n/tmproot#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456db_name./regex//tmp更详细的使用方法请查看手册,或者调用以下命令查看mysqlhotcopy的帮助:perldoc/usr/local/mysql/bin/mysqlhotcopy注意,如果要使用mysqlhotcopy,必须有SELECT和RELOAD权限(执行FLUSHTABLES),还必须有读权限datadir/db_name目录。
通过恢复mysqlhotcopy备份的整个数据库目录可以直接复制到mysqld指定的数据目录(本例为/usr/local/mysql/data/)。
如下例所示:root#cp-rfdb_name/usr/local/mysql/data/root#chown-Rnobody:nobody/usr/local/mysql/data/(将db_name目录的所有者更改为mysqld用户)3、备份SQL语法3.1备份BACKUPTABLE语法其实和mysqlhotcopy的工作原理类似,锁定表,然后复制数据文件。
可以实现在线备份,但效果不太理想,不推荐。
它只复制表结构文件和数据文件,但不同时复制索引文件,因此恢复速度较慢。
示例:BACKTABLEtbl_nameTO'/tmp/db_name/';请注意,您必须具有FILE权限才能执行此SQL,并且/tmp/db_name/目录必须可由mysqld用户写入。
导出的文件不能覆盖现有文件,以避免安全问题。
要恢复使用BACKUPTABLE方法备份的文件,可以运行RESTORETABLE语句来恢复数据表。
示例:RESTORETABLEFROM‘/tmp/db_name/’权限要求与上述类似。
3.2SELECTINTOOUTFILE将数据导出到纯文本文件。
您可以自定义字段间隔以方便处理此数据。
示例:SELECTINTOOUTFILE'/tmp/db_name/tbl_name.txt'FROMtbl_name注意,执行此SQL必须具有FILE权限,并且文件/tmp/db_name/tbl_name.txt必须对mysqld用户可写,并且导出的文件;不能被覆盖已存在的文件以避免安全问题。
对于使用SELECTINTOOUTFILE方法备份的文件,可以使用LOADDATAINFILE语句来恢复数据表。
示例:LOADDATAINFILE‘/tmp/db_name/tbl_name.txt‘INTOTABLEtbl_name与上述类似。
导入数据之前,数据表必须已经存在。
如果您担心数据重复,可以添加REPLACE关键字来替换现有记录或使用IGNORE关键字来忽略它们。
4、启用二进制日志(binlog)使用binlog方式比较容易。
灵活,省心省力,还可以支持增量备份。
启用binlog后必须重新启动Mysqld。
首先,关闭mysqld,打开my.cnf,添加以下行:server-id=1log-bin=binloglog-bin-index=binlog.index,然后启动mysqld。
运行过程中会产生binlog.000001和binlog.index。
前一个文件是mysqld,记录了所有对数据的更新操作,后一个文件是所有binlog的索引,不能轻易删除。
关于binlog的信息请查看手册。
当需要备份时,可以先执行一条SQL语句让mysqld停止写入当前的binlog,然后就可以直接备份文件了。
这样就可以达到增量备份的目的:FLUSHLOGS是备份复制系统中的一个slave,你还应该备份master.info和relay-log.info文件。
备份的binlog文件可以使用MySQL提供的mysqlbinlog实用程序查看,例如:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001。
该工具可以显示指定数据库下的所有SQL语句。
而且还可以限制时间间隔,相当实用。
详情请参阅手册。
恢复时,可以使用类似如下的语句:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001|mysql-uyejr-pyejrdb_name直接使用mysqlbinlog输出的SQL语句作为输入来执行。
如果你有闲置的机器,不妨用这个方法来备份一下。
由于从机的性能要求相对较低,可以低成本实现增量备份,并且可以分担部分数据查询负载。
具体解决方案:1、主从同步参见http://kerry.blog.51cto.com/172631/1102062、增量备份:做全量备份每天12:00和12:00,每小时备份一次binlog,即增量备份,具体操作如下:在Linux下打开binlog,在/etc/my.cnf中添加mysqld部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50Mwindows下打开binlog%mys将mysqld部分添加到ql%/my.ini中:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50M完整备份脚本(仅提供部分参考)。
数据量比较大,可以一天时间全部准备好,然后每小时进行增量备份#!/bin/sh#mysqldatabackupscript##usemysqldump--help,getmoredetail.BakDir=/backup/mysqlLogFile=/b;ackup/mysql/mysqlbak.logDATE=`日期+%Y%m%d`echo"">>$LogFileecho"">>$LogFileecho"-----------------------------------------------------------------">>$LogFileecho$(日期+"%y-%m-%d%H:%M:%S")>>$LogFilecho"--------------------------------">>$LogFilecd$返回DirDumpFile=$DATE.sqlGZDumpFile=$DATE.sql.tgzmysqldump--quick--所有数据库--flush-logs--delete-master-logs--lock-all-tables>$DumpFilecho"DumpDone">>$LogFiletarczvf$GZDumpFile$DumpFile>>$LogFile2>&1echo"[$GZDumpFile]返回upSuccess!">>$LogFilerm-f$DumpFile#deletepreviousdailybackupfiles:使用增量备份文件。
如果文件已完全备份,则删除增量备份文件.cd$BakDir/dailyrm-f*cd$BakDirecho"BackupDone!"echo"PleaseCheck$BakDirectory!"echo"copyittyourlocaldiskorftptosomwhere!!!"上面的脚本ls-al$BakDir将mysql备份到本地/backup/mysql目录,增量备份文件放在/backup/mysql/daily目录下。
增量备份的数据量相对较小。
但需要在全量备份的基础上操作增量备份,单独使用binlog,脚本如下:#!/bin/sh#mysqlbinlogbackupscript/usr/bin/mysqladminflush-logsDATADIR=/var/lib/mysqlBAKDIR=/backup/mysql/daily###如果做了特殊设置,请更改此或更改使用此变量的行:默认是取机器名,mysql也默认取机器名HOSTNAME=`uname-n`cd$DATADIRFILELIST=`cat$HOSTNAME-bin.index`##计算行数,即文件数COUNTER=0forfilein$FILELISTdoCOUNTER=`expr$COUNTER+1`doneNextNum=0forfilein$FILELISTdobase=`basename$文件`NextNum=`expr$NextNum+1`if[$NextNum-eq$COUNTER]thenecho"skiloadest"elsedest=$BAKDIR/$baseif(test-e$dest)thenecho"skipexist$base"elseecho"copying$base"cp$base$BAKDIRfifidoneecho"backupmysqlbinlogok&q第一个是StorageDaemon,是存储端,负责将数据从网络备份到本机并在恢复期间传输数据。
最后一个是FileDaemon,它在备份期间传输文件并在恢复期间接受数据并恢复它。
事实上,以上三个模块都不能让bacula运行,第二个模块是数据库模块。
该模块可以通过SQLite(编译为bacula)或MySql和PostgreSql来使用。
作者推荐mysql。
编译还需要一些第三方库:GZIP和Readline。
文档中没有说明,但实际上需要另一个软件才能保证正常运行:ntp。
因为差异备份和增量备份都是依靠文件修改时间来决定是否备份。
一台机器备份问题不大,但网络备份需要考虑各主机的时间差。
所以我建议所有主机每天运行ntpdate两次来调整时间。
如果您在上海交通大学网络,您可以使用dns.sjtu.edu.cn来调整时间。
如果您使用磁带驱动器进行备份,还要检查该磁带驱动器是否受支持。
最好阅读文档中的UnderstandingPools、Volumes和Labels部分。
否则,您在配置过程中会感到困惑。
2.编译过程很简单,文档也很详细,就不详细介绍了。
注意--enable-client-only可以用来在备份机器上编译。
3、数据库创建下面说一下mysql的创建过程。
首先,在代码根目录下,cdsrc/cats/./grant_mysql_privileges./create_mysql_database./make_mysql_tables如果mysql不在本机,可以添加-h参数来指定。
默认为空密码的root用户可以使用-p参数启用密码验证。
如果你想使用其他用户,只需更改脚本即可,非常简单。
Bacula用户是默认创建的,密码为空。
建议更改密码。
Bacula可以使用任意数量的数据库,这意味着您可以使用两个数据库,然后互相备份。
4.在运行FileDaemon(fd)配置之前,请注意一些必须注意的事情在配置中指定主机地址时,最好使用ip我配置时似乎不能使用主机名。

如果是远程IP,则当fd在备份主机上运行时,127.0.0.1将不起作用。
配置非常简单,只需指定哪个director可以运行并调度它,密码是什么,fd的名称,工作目录以及将日志发送到哪里。
只需修改修改默认配置即可。
5.在接受备份的计算机上运行StorageDaemon(sd)sd。
配置也相当简单,只不过比fd多了一个设备来指定使用哪个硬件来备份数据。
您可以将多个数据备份到一台设备。
如果有磁带驱动器备份,Bacula会告诉您恢复时使用哪个磁带。
因为我使用的是文件备份方式,所以我为每个备份配置一个设备,并将不同的备份放在不同的目录中。
以下是备份文件的简单配置Device{Name=dbdevMediaType=File#随意写,但是直接配置时。
保存到或时,必须输入相同的ArchiveDevice=/var/bak/db#备份到哪个目录必须存在LabelMedia=yes;#AutomaticlabelRandomAccess=Yes;AutomaticMount=yes;