请多多留言指教
注:以git-bash为基础,介绍mysqldump命令,导出相关数据
业务需求:根据条件检索并导出某张表中的数据,生成数据备份作为迁移数据
1、查看mysql安装目录
打开Navicat,点击查询,新建查询,show variables like "%char%";
2、mysqldump命令在什么位置执行?
a> cd进入到mysql安装目录,再次cd进入bin目录
b> 查看帮助信息:mysqldump -help,查看详细帮助信息:mysqldump --help
3、简单执行mysqldump命令,备份数据库
mysqldump -uroot -p123456 ayiol > d:/test_20200615.dump
以下为备份文件的部分内容:
4、备份某一个数据库中某一个表
命令格式如下:
mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径
例子:
mysqldump -uroot -p123456 ayiol a_user > test_20200615_user.sql
5、备份某一个数据库中某一个表,按条件备份(整行数据)
mysqldump -uroot -p123456 -t ayiol a_city --where="id<10" --triggers=false --replace > d:/city_0615.sql
说明:
-t:只导数据,不增加create table建表和drop table语句
--where:条件
--triggers=false:不导触发器
--replace:使用REPLACE INTO 取代INSERT INTO
解释:Replace INTO和INSERT INTO的区别:
REPLACE的运行与baiINSERT很相似。只有du一点例外,假如表中的一个旧zhi记录与一个用于PRIMARY KEY或一个UNIQUE索引的dao新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
6、按条件备份(指定字段)
例子:
mysql -uroot -p123456 ayiol -e "SELECT id,name,code from a_city where id < 10 INTO OUTFILE'd:/temp/0617_city_part_property.sql'"
结果:
悲剧了。。。(并不是我想要的数据格式,想要的为insert into格式)
又找了一种解决方案:
mysql -uroot -p123456 ayiol -e "select concat('insert into a_city(id,name,code) values(',id,',\'',name, '\'',',\'',code, '\');') from a_city where id < 10 INTO OUTFILE 'd:/temp/0617_city_part_property_02'"
结果:
总算解决了,已亲自测试(网上查找的资料)
7、按条件备份(在insert中显示具体的字段名)
例子:
mysqldump -uroot -p123456 --skip-extended-insert --complete-insert -t ayiol a_city --where="id<10">d:/temp/0617_hasInsertValues.sql
结果:
解释:
-t:只导数据,不增加create table建表和drop table语句
-c(--complete-insert):在insert中增加具体的字段名
-w(--where):后边跟where条件,只导出符合条件的数据
-skip-extended-insert:一行一行的导出
遇到的问题:
1、备份sql文件(文件很大),打开Navicat,指定数据库,运行sql文件时 提示10038错误码
最终查找问题: mysql安装目录下的my.ini文件中,max_allowed_packet未设置
解决方式:打开mysql安装目录,找到my.ini文件,新增属性max_allowed_packet=1024M
注:
MySQL max_allowed_packet设置以字节发送给服务器的最大数据包大小. (默认: 1MB),数据库变更需要:大的插入和更新可能会被max_allowed_packet参数限制,导致失败。
mysqldump备份命令
命令格式:
mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
例子:
mysqldump -hlocalhost -P3306 -uroot -p123456 -t ayiol a_city --where="id < 10 " --triggers=false --replace > D:/temp/0616_city.sql
其它引用参考网址(mysqldump命令):
https://baijiahao.baidu.com/s?id=1612955427840289665&wfr=spider&for=pc