您的位置:首页 > 运维架构 > Shell

Mysql 数据库升级shell脚本编写与测试心得

2016-04-26 17:45 399 查看
1.数据库使用到的账户信息及动态可变的信息最好定义为变量,放置服务器变更或表名变更需要修改多个地方,如果有遗漏,引发执行shell中断等问题:例如服务器IP地址 ,登录用户名,登录密码 ,端口号 ,AB表机制中的每天轮训切换的表名等。

2.在shell脚本中使用 mysql -h$mysqlhost -u$mysqluser -p$mysqlpasswd -e 方式执行 Mysql SQL脚本时,最后不要超过1000行,否则会提示 参数过长错误 。

3.最后给shell脚本中引入zc_log日志部分代码,每次执行完后将执行结果保存至日志中,使用 “ $? ” 获取前一次执行命令的返回结果,返回0表示执行成功没有错误信息,便于对shell脚本执行情况监控与执行过程中的问题定位与处理

4.数据库升级shell脚本编写时应注意,最后将一个大升级shell分割为多个小shell,避免shell过大,如果执行过程中有问题,不方便定位问题与对应shell执行情况掌握不清楚,回退等比较困难。一般建议分割为:新增表(upgradeCreateTables.sh) 、修改表 (upgradeAlterTables.sh) 、新增存储过程与触发器(upgradeCreateProc_triggers.sh)、修改存储过程与触发器(upgradeUpdateProc_triggers.sh)、新增表数据插入(upgradeCreateTablesData.sh)、修改表历史数据(upgradeUpdateOldData.sh)
、 清空对时效性要求不高的历史表数据(upgradeClearOldData.sh),例如 db_log与user_log ,保留近一个月左右的即可,升级前讨论确定

5.编写升级完成后检查项:新增表(个数,表结构) ,修改表(个数与表结构),存储过程(个数与内容),触发器(个数与内容)

6.使用zc_log时应注意,zc_log代码中的 "`"符号,一个都不能少,否则会在执行Shell时出现不必要的错误,数据库脚本中最后将" `"替换为空格,不要在升级shell脚本中直接替换,应该在其他文件中替换,防止将zc_log中的"`"替换掉。

7.在编写触发器与存储过程部分升级Shell脚本时,如果没有drop相关语句,后期手动添加时应该注意多次检查防止将目标删除对象名下错了,导致删除其他存储过程或触发器,引发不必要的错误。

8.在执行升级Shell前,备份数据库时,建议将表结构和标数据 与触发器和存储过程分别备份(防止由于部分表有触发器,导致在将备份数据导出数据库时,触发器执行导致数据备份前后不一致问题),再做一次完整备份(防止之前备份有问题,还有一个备份,双保险)

mysqldump备份参数简单介绍: --sikp-triggers 不导出触发器 -R 导出存储过程与自定义函数 --triggers 导出触发器 --no-data 不导出数据 --no-create-info 不导出表结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: