mysqldump命令详解

mysqldump命令是什么样的?我们一起来看看吧。
mysqldump命令是MySQL数据库的备份工具,可以使用标准SQL语言从MySQL服务器导出数据库并保存到文件中。
mysqldump命令备份的工作原理:一般来说,使用mysqldump备份数据库的过程,实际上就是直接将mysql库中的数据以逻辑SQL语句的形式输出或者创建备份文件的过程。
语法格式:mysqldump(可选)参数说明:1.-B可以指定多个库,添加库创建语句,使用语句。
2.--compact删除适合调试输出的注释,并可能生成不必要的结构。
3.-A备份所有库。
表4,-F刷新与--flush-logs5,--master-data相同的二进制日志,添加binlog日志名称和对应的位置点6,-x,--。
lock-tables锁定表7,-l只读锁定表8,-d备份表结构9万条,-t备份10万条数据,--single-transaction适合innodb事务型数据库备份11,--opt—add-drop-table、—add-locks、—create-options、—skip-opt执行与12.-c类似的优化角色。
导出数据时,在insertin中添加列名。
13.--where:导出数据时添加条件。
注意示例:1、导出整个数据库mysqldump-u用户名-p数据库名。
、mysqldump-u导出表用户名-p数据库名表名导出文件名mysqldump-ulinuxde-psmgp_apps_linuxdeuserslinuxde_users.sql3导出数据库结构mysqldump-ulinuxde-p-d--add-drop-tablesmgp_apps_linuxdelinuxde_db.sql

MySQL导出文件失败的问题及解决方法mysql不能导出文件

MySQL导出文件错误问题及解决方案MySQL是一种非常流行的关系数据库管理系统,可用于存储和管理各种数据。
在使用MySQL时,经常需要将数据导入或导出到文件中进行备份或迁移。
但是,有时在导出MySQL文件时可能会遇到一些问题,比如导出错误、导出数据异常等。
本文将介绍一些常见的MySQL导出文件错误问题并提供相应的解决方案。
问题1:导出的文件为空。
有时,当您运行mysqldump命令导出文件时,导出的文件将为空。
这通常是由于权限设置不正确造成的。
可以通过以下措施解决:1.使用管理员权限运行mysqldump命令,例如:sudomysqldump-uroot-pdb_name>dump_file.sql这可确保您有足够的权限导出文件。
2.检查导出目录权限设置是否正确,并确保当前用户对该目录具有读写权限。
3.确认导出命令是否正确。
导出命令的格式为:mysqldump-uusername-ppassworddatabase_name>dump_file.sql。
请注意,用户名和密码必须替换为正确的用户名和密码,database_name必须替换为要导出的数据库的名称dump_file.sql。
将其替换为导出文件的名称。
问题2:导出的数据异常或乱码。
有时,使用mysqldump命令导出文件后,在其他系统中使用时发现导出的数据异常或者导出的文件出现乱码。
这可能是由于导出文件的编码不正确造成的。
此时,可以尝试以下方法:1、设置导出文件的编码方式为utf8,例如:mysqldump-uusername-ppassword–default-character-set=utf8database_name>dump_file.sql2、添加以下语句在导出文件的开头添加:SETNAMESutf8这条语句可以将导出数据的编码方式设置为utf8,以保证不会出现乱码在其他系统中使用时会出现令人困惑的字符。
问题三:导出的文件过大当导出的数据量较大时,导出的文件可能会过大,无法存储或传输。
此时,可以尝试以下方法:1、使用gzip对导出的文件进行压缩,例如:mysqldump-uusername-ppassworddatabase_name|gzip>dump_file.sql.gz该方法可以先将导出的数据进行压缩,然后导出到一个文件,可以显着减少。
2、分段导出数据,每个文件导出一部分数据,最后将所有文件合并在一起。
例如:mysqldump-uusername-ppassworddatabase_name–where=”iddump_file_01.sqlmysqldump-uusername-ppassworddatabase_name–where=”id>10000andiddump_file_02.sqlmysqldump-uusername-ppassworddatabase_name–where="id>20000andiddump_file_03.sql...这种方法可以将数据导出到多个文件中,每个文件包含一部分数据,最后将所有文件合并在一起总结MySQL是一个非常强大的数据库管理系统,但是他们还可以本文介绍了MySQL导出文件错误相关的常见问题并提供了相应的解决方案,希望这些方法可以帮助读者更好地使用MySQL进行导出和导出。
数据备份。

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

mysql常见的备份方式有:mysqldump、mysqlhotcopy、BACKUPTABLE、SELECTINTOOUTFILE,或者备份二进制日志(binlog),或者直接复制数据文件和相关配置文件。
MyISAM表以文件的形式保存,因此备份相对容易。
可以使用上面提到的几种方法。
Innodb中的所有表都存储在同一个数据文件ibdata1中(可能是多个文件,也可能是独立的表空间文件),备份起来相对困难。
免费的解决方案可以是复制数据文件和备份binlog。
或者使用mysqldump。
1.mysqldump备份mysqldump采用SQL级别的备份机制。
它将数据表导出到SQL脚本文件中。
比较适合不同MySQL版本之间的升级。
这也是最常用的备份方法。
示例:mysqldump-uroot-pdatabasetable>/home/jobs/back.sqlmmysqldump也可以用于增量备份。
网上有很多mysqldump相关参数,这里不再赘述。
2、mysqlhotcopy备份【如果是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指定的datadir(本例中为/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;注意,必须有FILE权限才能执行这条SQL,并且文件/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;如果它是备份复制系统中的从属设备。
服务器端,还应该备份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点、下午12点做一次全量备份,并进行备份每小时一次的binlog,即增量备份,具体操作如下:Linux下打开binlog,在/etc/my.cnf中添加mysqld部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50Mwindows下打开binlog%mys在ql%/my.ini中添加mysqld部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50M完整备份脚本(仅提供部分参考)。
如果数据库数据量比较大,可以一天内全部准备好,然后每小时进行一次增量备份;#!/bin/sh#mysqldatabackupscript##usemysqldump--help,getmoredetail.BakDir=/backup/mysqlLogFile=/backup/mysql/mysqlbak.logDATE=`date+%Y%m%d`echo"">>$LogFileecho"">>$LogFileecho"----------------------------------------------">>$LogFileecho$(日期+"%y-%m-%d%H:%M:%S")>>$LogFilecho"--------------------------">>$LogFilecd$BakDirDumpFile=$DATE.sqlGZDumpFile=$DATE.sql.tgzmysqldump--quick--所有数据库--flush-logs--delete-master-logs--lock-all-tables>$DumpFilecho"DumpDone">>$LogFiletarczvf$GZDumpFile$DumpFile>>$LogFile2>&1echo"[$GZDumpFile]备份成功!">>$LogFilerm-f$DumpFile#deletepreviousdailybackupfiles:使用增量备份文件。
如果文件已完全备份,请删除增量备份文件。
cd$BakDir/dailyrm-f*cd$BakDirecho"BackupDone!"echo"pleaseCheck$BakDirDirectory!"echo"copyittoyourlocaldiskorftptosomewhere!!!"上面的脚本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$file`NextNum=`expr$NextNum+1`if[$NextNum-eq$COUNTER]thenecho"skiplastest"elsedest=$BAKDIR/$baseif(test-e$dest)thenecho"skipexist$base"elseecho"copying$base"cp$base$BAKDIRfifidoneecho"backupmysqlbinlogok"增量备份脚本是flush-logs备份之前。
MySQL会自动将内存中的日志放入文件中,然后生成新的日志文件,所以我们只需要备份前几个即可,即不备份。
最后一张。
因为从上次备份到本次备份,可能会产生多个日志文件,所以需要对文件进行检测。
如果已备份,则无需备份。
数据恢复:先恢复最近的全量备份数据:mysql-hhostname-uusername-ppassworddatabasename<备份文件.sql,然后恢复binlog:./mysqlbinlog--start-date="2016-04-1017:30:05"--stop-date="2016-04-1017:41:28"/usr/local/mysql/data/mysql-bin.000002|mysql-uroot-p1234565。
复制文件直接备份数据文件。
与前面的方法相比,备份数据文件是最直接、快捷、方便的。
缺点是增量备份基本不可能。

为了保证数据的一致性,在备份文件之前需要执行以下SQL语句:FLUSHTABLESWITHREADLOCK;即将内存中的数据全部刷新到磁盘,同时锁定数据表,保证复制过程中不会写入新的数据。
进入。
这种方法备份的数据恢复起来也非常简单,只需复制回原来的数据库目录即可。
注意,对于Innodb类型的表,还需要备份其日志文件,即ib_logfile*文件。
因为当Innodb表损坏时,可以依靠这些日志文件来恢复。
6、使用rsync进行备份rsync作为同步工具也可以用于备份,但是需要配置服务器和客户端。
示例rsync-vzrtopg--progress--deleteroot@192.168.1.3::root/tmp/相关rsync配置可以参考http://fanqiang.chinaunix.net/a6/b7/20010908/1305001258.html缺点是rsync是基于文件修改时间的增量备份,因此备份数据库准备充分,配置也比较多麻烦。
7.使用BigDump工具导入非常大的MySQL数据库备份文件。
常用的MySQL数据库恢复工具(也可以执行备份操作)是phpMyAdmin,它是大多数托管提供商(例如Hawkhost)免费提供的开源、免费工具。
相信很多站长也使用过phpMyAdmin来备份和恢复网站数据库。
确实很方便,而且有多语言界面。
不过,有一种情况你可能还没有遇到过,那就是当你的数据库大小比较大时,比如SQL备份文件大于2MB,甚至大于10MB。
这时,如果你通过phpMyAdmin恢复数据库,就会出现错误,显示如下提示:这是因为你的SQL文件大小太大,超出了phpMyAdmin的处理能力。
这种情况尤为突出当网络速度比较慢的时候。
例如,如果网站管理员在网络拥塞的周末晚上8点尝试使用phpMyAdmin恢复大型MySQL数据库备份,则文件大小将过大。
很容易遇到这个问题。
显然phpMyAdmin只适合恢复较小的SQL文件备份。
对于非常大的MySQL数据库备份的恢复,必须使用专用的恢复工具,那就是:BigDump!工具下载地址http://www.jb51.net/codes/37147.html8、使用bacula(www.bacula.org)进行备份zZbacula采用模块化设计,C/S架构。
理论上,它可以将任意n台主机的数据备份到任意n台机器上,而且不需要在每台机器上写配置文件来控制它们的运行。
所有主要工作都由一名导演控制。
通过登录director,您可以知道哪些备份正在运行、哪些备份成功、哪些备份失败。
所有日志也将集中在您指定的地方,让管理工作变得更加轻松。
恢复也非常简单。
您只需运行几个命令即可恢复指定的备份。
支持全量备份、差异备份、增量备份;支持将备份写入硬盘文件和写入磁带。
支持的平台相当多,设置中包括win平台(备份到win,但尚不支持备份到win)。
当然也有一些缺点,比如并发备份支持还没有经过彻底的测试,作者表示最好不要尝试,除非你自己测试过。
还有一点是文档中没有快速入门。

文档有点太详细了,没有耐心看不下去。

1.前期准备Bacula由三个模块组成。
一个是Director,用于指挥整个系统的运行,还有jobschedule,用于通知其他两个模块工作。
第一个是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#这个随便写,但是当配置Direct存储在or中时,一定要写同样的ArchiveDevice=/var/bak/db#备份哪个目录最多,必须存在LabelMedia=yes;#AutomaticlabelRandomAccess=Yes;AutomaticMount=yes;