DateTime 小贴士

关于DateTime的记录笔记:

1. DateTime.Now.ToLongDateString() =>2018年6月1日

2.DateTime.Now.ToLongTimeString()=>11:42:50

3.DateTime.Now.ToShortDateString()=>2018/6/1

4.DateTime.Now.ToShortTimeString()=>11:45

5.DateTime.Now.Date=>2018/6/1 0:00:00

C# 14位日期型字符串yyyyMMddHHmmss转变为日期格式

DateTime   dt   =   DateTime.ParseExact("20060709110901","yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);

 

#!/bin/bash datetime=`date +%Y%m%d-%H-%M-%S` OneWeekAgo=`date -d "1 week ago" +%Y%m%d` basePath=/usr/local/mysql/backup bakFileName=mysql_backup_$datetime.sql bakFile=$basePath/$bakFileName logfile=$basePath/full_$datetime.log pid=`ps -ef | grep -v "grep" |grep -i mysqldump|awk '{print $2}'|head -n 1` if [ -z $pid ] then echo " start full backup database " >> $logfile touch $bakFile #docker run --rm -v $basePath:/backups mysql:5.7.30 \ mysqldump -uroot -p'123456' --all-databases --quick --triggers --routines --events --single-transaction --result-file=/$basePath >> $logfile 2>&1 #docker exec -i mysql sh -c "exec mysqldump -uroot -p'skycomm@5342' --all-databases --quick --triggers" >$bakFile 2>&1 mysqldump -uroot -p'123456' --anti_fraud --quick --triggers --routines --events --single-transaction --result-file=/usr/local/mysql/backup/anti_fraud >> $logfile 2>&1 mysqldump -uroot -p'123456' --skycomm_base_service --quick --triggers --routines --events --single-transaction --result-file=/usr/local/mysql/backup/skycomm_base_service >> $logfile 2>&1 mysqldump -uroot -p'123456' --performance_schema --quick --triggers --routines --events --single-transaction --result-file=/usr/local/mysql/backup/performance_schema >> $logfile 2>&1 ret=`tail -n 1 $bakFile |grep "Dump completed on"|wc -l` if [ "$ret" = 1 ] ; then echo 'delete expired backup ' $basePath/mysql_backup_$OneWeekAgo*.sql >> $logfile rm -f $basePath/mysql_backup_$OneWeekAgo*.sql rm -f $basePath/full_$OneWeekAgo*.log else echo 'backup failure ,no delete expired backup' >> $logfile fi else echo "****** mysqldump in backup database ****** " >> $logfile fi 帮我优化这个sql
04-03
### 优化 `mysqldump` 备份 Shell 脚本的方法 为了提高基于 `mysqldump` 命令的 MySQL 数据库备份脚本的性能和可靠性,可以从以下几个方面入手: #### 1. **减少不必要的数据传输** 通过指定具体的表或排除不需要备份的数据表,可以有效降低备份过程中的资源消耗。例如,在执行 `mysqldump` 时可以通过参数 `-B` 或 `--ignore-table` 来控制哪些数据库或表被导出。 ```bash mysqldump -uroot -pOpenlab123! --databases db_name --ignore-table=db_name.unnecessary_table > backup.sql ``` 这种方式能够显著提升效率并节省存储空间[^1]。 #### 2. **启用压缩功能** 在大规模数据库环境中,未压缩的 SQL 文件可能会占用大量磁盘空间,并增加网络带宽需求。因此建议使用 gzip 对输出文件进行实时压缩处理。 ```bash mysqldump -uroot -pOpenlab123! database_name | gzip > "${db}_$(date +%F).sql.gz" ``` 上述方法不仅减少了最终生成文件大小,还加快了后续恢复操作的速度[^2]。 #### 3. **设置合理的锁机制** 对于高并发读写的生产环境来说,默认情况下运行 mysqldump 可能会引起短暂锁定现象影响正常业务流程 。为此我们可以考虑采用如下选项之一解决该问题: - 使用 `--single-transaction`: 这一模式特别适合于 InnoDB 存储引擎下的事务安全型应用场合, 它会在整个转储过程中维持一个单独的事物状态而无需显式加锁. ```bash mysqldump -uroot -pOpenlab123! --single-transaction database_name > dumpfile.sql ``` - 结合 `FLUSH TABLES WITH READ LOCK` 和解锁命令手动管理全局只读锁的时间窗口长度. #### 4. **实现增量备份策略** 全量备份虽然简单易行但随着数据增长其耗时也会相应延长 , 所以引入差异或者日志级别的增量方案变得尤为重要 . 下面展示了一个基本框架用于记录上次完成时刻戳以便下次仅需提取新增部分 : ```bash #!/bin/bash LAST_BACKUP_TIME=$(stat -c %Y latest_backup_file.sql) || true # 获取最近一次成功备份时间戳 if [ ! -z "$LAST_BACKUP_TIME" ]; then START_DATE="--start-datetime=\"$(date -d @$(( LAST_BACKUP_TIME )))\"" fi mysqldump -uroot -pOpenlab123! --master-data=2 --dump-date --events --routines --triggers \ --all-databases $START_DATE > incremental_dump_$(date +%F_%T).sql ``` 这里利用二进制日志位置(`--master-data`)标记当前复制点位信息方便主从同步场景下快速定位起点[^3]. #### 5. **增强错误检测与重试逻辑** 实际部署当中难免遇到各种意外状况比如连接超时等问题所以应该加入健壮性的异常捕获措施以及自动化的失败补偿手段 . ```bash MAX_RETRIES=3 RETRY_COUNT=0 until [[ $RETRY_COUNT -ge $MAX_RETRIES ]] do mysqldump ... && break RETRY_COUNT=$(( RETRY_COUNT + 1 )) done [[ $RETRY_COUNT -eq $MAX_RETRIES ]] && echo "Backup failed after max retries." >&2 ``` 以上代码片段展示了当常规尝试未能顺利完成任务时如何安排有限次数内的重新发起请求直至达到最大限额为止才宣告彻底放弃. --- ### 提升可靠性和可维护性的小贴士 除了技术层面改进之外还需要关注其他软因素如标准化命名约定、定期清理过期档案防止堆积过多无用历史版本占据宝贵物理介质容量等等细节之处同样不可忽视哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值