这个博文是对下面这个文章进行了更深层次的探讨。
你可以和它进行相互补充,谢谢~!
只导出数据库结构
mysqldump -u root -p -d coinex >> coinex.sql
只需要加一个 -d 就可以只导出结构而不导出数据。
mysqldump -u root -p -d coinex btc >> btc.sql
这个是导出 coinex 数据库中 btc 这张表的结构
带有条件的数据库导出
mysqldump -u用户名 -p密码 -h mysql主机 --default-character-set=指定编码 数据库名称 表名称 --where=" 查询条件 " > 导出文件名.sql
例子:
mysqldump -u root -p 12345678 -h 192.168.1.123 --default-character-set=utf8 mydbname mytablename --where=" sid = 123456 and name = '小明同学' " > my_export_data.sql
远程我没试过,我只试过本地的,而且,-p 后面跟着密码不管用,必须要手动输入。。。查了一下,貌似是新版本的 mysql 的安全机制,因为暂时对这个没要求,所以,就不研究免密导出了。
这里特地说明一下
--where = " "
这样是不行的,必须是下面这种
--where=" "
mysql8.0 导入 mysql5.7 的时候出错
出现
[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
由于这两个版本的默认字符集不兼容,所以,导致,导入的时候出错。
解决的办法很简单。
解决方法:
打开sql文件,将文件中的所有
utf8mb4_0900_ai_ci 替换为 utf8_general_ci
utf8mb4 替换为 utf8
保存后再次运行sql文件,运行成功
有的时候,可能不是 utf8mb4_0900_ai_ci 和 utf8mb4,但也没关系,只要把相应位置的东西,进行匹配替换就好了。
导出的数据表再导入的时候出错
使用
mysqldump -u root -p -d coinex btc >> btc.sql
导出一张 sql 表的时候,我再次导入出现下面的问题
Variable ‘time_zone’ can’t be set to the value of ‘NULL’解决方法
查了一下网上的方法,说是需要扩大缓存量,但是,我扩大后还是不行。
后来我注意到,导出来的 sql 表中有这个
我将所有的注释都去掉后
果然就没有再报错。
mysqldump 的参数问题
查看参数可以使用
mysqldump --help
非常有用
比如,净化版的输出就是
mysqldump -u root -p --compact=TRUE --add-drop-table=FALSE --create-options=FALSE --add-locks=TRUE --column-statistics=FALSE -t ant t_relation >> ~/tmp.sql
如果 where 条件里面需要带 ' 的话,sql 的字符串语句是需要转译符号 \
1 | sql = f'mysqldump --login-path={login_path} --compact=TRUE --add-drop-table=FALSE --create-options=FALSE --add-locks=TRUE --column-statistics=FALSE -t --replace ant t_limit_trade_volume --where="coin=\'{coin}\'" >> ~/python/ant/ant/sql/{symbol_dict}/official_{symbol}.sql' |
打印出来就是
mysqldump --login-path=licong --compact=TRUE --add-drop-table=FALSE --create-options=FALSE --add-locks=TRUE --column-statistics=FALSE -t --replace ant t_limit_trade_volume --where="coin='BTMX'" >> ~/python/ant/ant/sql/bnb_ht_okb_hpt_ftt_btmx/test_bnb_ht_okb_hpt_ftt_btmx.sql
新版的 sql 命令
mysqlpump
mysql5.7以后,官方推荐用mysqlpump代替mysqldump,虽然只有一字之差,但是备份时间能缩短一半啊。
执行以下命令,即可备份数据库:
mysqlpump -uroot -p mydatabase > bak.sql