批处理之家's Archiver

pl05135513 发表于 2019-10-17 09:43

用sh脚本定时删除数据库数据,和修改数据

数据库名称
        lyy
数据库表名称
        lyy_test
数据库地址  127.0.0.1
数据库账户  testname
数据库密码  testpasswd

yun_test表内容
id   user   passwd    user_nicename      sex   addtime
1    lyy1    lyy         陆1                         1     1568044800
1    lyy2    lyy         陆2                         2     1568131200
1    lyy3    lyy         陆3                         1     1568217600
1    lyy4    lyy         陆4                         2     1568304000
1    lyy5    lyy         陆5                         2     1568390400
1    lyy6    lyy         陆6                         1     1568476800

1,对 yun_test 表  删除日期为 2019-10-14 前的所有数据(自然周 每次删除1W行 暂停30秒)
2,对 yun_test 表  删除字段sex为 2 并切时间早于 2019-10-17(一天) 前的所有数据
3,将 yun_test 表  user_nicename 陆6 更新  sex 的字段为2

Batcher 发表于 2019-10-17 10:21

什么数据库,MySQL? Oracle?
你是不会写SQL语句?还是不知道怎么用sh连接数据库并执行SQL语句呢?参考:
[url]https://mp.weixin.qq.com/s/QxbMDwWiuWJIBublB1Dp9A[/url]

pl05135513 发表于 2019-10-17 11:01

[i=s] 本帖最后由 pl05135513 于 2019-10-17 11:07 编辑 [/i]

[quote]什么数据库,MySQL? Oracle?
你是不会写SQL语句?还是不知道怎么用sh连接数据库并执行SQL语句呢?参考:
[size=2][color=#999999]Batcher 发表于 2019-10-17 10:21[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=224141&ptid=54007][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]


    mysql数据库,Centos环境

Batcher 发表于 2019-10-17 11:29

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=224143&ptid=54007]3#[/url] [i]pl05135513[/i] [/b]


先把需要执行的 SQL 语句放到 XXX.sql 里面,然后执行命令:
mysql -h服务器地址 -u用户 -p密码 < XXX.sql

pl05135513 发表于 2019-10-17 14:26

[quote]回复  pl05135513


先把需要执行的 SQL 语句放到 XXX.sql 里面,然后执行命令:
mysql -h服务器地址  ...
[size=2][color=#999999]Batcher 发表于 2019-10-17 11:29[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=224144&ptid=54007][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]


   主要是 这个 (自然周 每次删除1W行 暂停30秒) 怎么写

Batcher 发表于 2019-10-17 19:13

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=224145&ptid=54007]5#[/url] [i]pl05135513[/i] [/b]


脚本放在 crontab 里面可以实现每周执行一次,例如:
0 0 * * 1 /tmp/test.sh

删除1W行可以在select语句中加个限定条件,mysql里面用的是 limit
SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows
[url]https://dev.mysql.com/doc/refman/5.6/en/select.html[/url]

暂停30秒的目的是什么呢?

pl05135513 发表于 2019-10-23 09:55

就是 比如 我执行了  SELECT * FROM tbl LIMIT 5000;   然后 间隔30秒 再次执行  一直到 上个自然周addtime查不出来为止

Batcher 发表于 2019-10-23 10:15

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=224307&ptid=54007]7#[/url] [i]pl05135513[/i] [/b]


    暂停30秒的目的是什么呢?

pl05135513 发表于 2019-10-23 11:01

不让数据库卡死  数据量比较大  一次删除十万 我觉得 还坑得住 不然 扛不住

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.