mysql命令
1、mysql命令导出表中某个字段
需求:存储内容更换了存储,需要将存储id给运维用于迁移
执行
sudo nohup mysql -hxxx -uxxx -Pxxx -pxxx -Dxxx -e"select content_id from xxx where content_id!=''" > /home/yanfa/20230321.txt &
查看后台关于mysql的进程ps -ef | grep mysql
结果
控制台报出直接被Killed,说明进程被杀死了
[1]+ Killed sudo nohup mysql -hxxx -uxxx -Pxxx -xxx -Dxxx-e"select content_id from xxx where content_id!=''" >
原因
导出数据太大 直接被kill掉了 加上 --quick
解决
添加参数–quick 处理的数据大概两千八百多万行,1.4G
mysql --quick -hxxx -uxxx -Pxxx -pxxx -Dxxx -e"select content_id from xxx where content_id!=''" > /home/yanfa/20230321_A1.txt
2、导入测试环境数据库中所有表到本地中,目的主要是为了调试
a、导出测试环境数据 同时进行压缩()
sudo nohup mysqldump -h127.0.0.1 -P3306 -uroot -p123 --databases xxx | gzip > /home/yanfa/xxx_test.sql.gz &
b、导入到本地(对上面压缩包解压执行导入命令、数据库提前没有创建所以下面这也不需要指明导入哪个数据库,没有自动为我们创建数据库)
mysql -hlocalhost -P3306 -uroot -p3306 < /Users/liuyuanyuan/Desktop/company/mysqlcopy/databasecopy/xxx_test.sql
sql语句踩坑合集
1、MySql中count与limit混用
参考:传送门
背景:一张表中存储了文本的内容id,由于更换了存储,需要把改表中的字段导出来。
当使用sudo nohup mysql -hxxx -uxxx -Pxxx -pxxx -Dxxx -e"select content_id from xxx where content_id!=''" > /home/yanfa/20230321.txt &
发生了进城被killed掉,原因是数据量过大大概有3000w数据1.4G,解决是添加–quick参数。不过在这我是想用分段导出的。
先把总数查出来,然后根据情况分段,发现查询的结果是总数。
select count(content_id) from xxx where content_id!='' order by id limit 0,12000000
select count(content_id) from xxx where content_id!='' order by id limit 12000000,25116871
原因:count和limit混用不起作用,因为limit将不会限制计数或总和,而只限制返回的行