作者:李红(老李),中国开源协会(oscna.org)数据库分会成员,热衷于数据库集群架构相关方向,上海某企业MySQL数据库负责人。

本文来源:Linux备忘录(iirwt.com)出品,转载请注明来源,谢谢。


【数据库巡检脚本-方案部署设计图】

一、MySQL 数据库巡检方案(适用于 Centos And Ubuntu 系统)

(1)需要自己准备三台数据库环境 (此操作必须根据自己的服务器情况部署(磁盘信息(磁盘路径)或者数据库安装路径  等等),别直接拿走使用)
(2)对应数据库 IP 有三台  (192.168.33.50(插入表数据库(巡检数据库)) 192.168.33.51(MySQL 主) 192.168.33.52(MySQL 从))

二、主库准备 shell脚本 以及 文件路径(192.168.33.51)

(1)准备存放的相关文件路径
[root@DBA01 ~]# mkdir -p /mnt/xvda/mysql_back
[root@DBA01 ~]# mkdir -p /mnt/xvda/mysql_scp
[root@DBA01 ~]# mkdir -p /mnt/xvda/mysql_shell
[root@DBA01 ~]# mkdir -p /mnt/xvda/mysql_shell/log
[root@DBA01 ~]# cd /mnt/xvda/mysql_scp/
[root@DBA01 mysql_scp]# touch all_back_test_183.txt
[root@DBA01 mysql_scp]# touch all_back_test_time_183.txt(2)准备 shell 相关脚本(全备份脚本)测试这里  我把备份放在主库上   不合适,你们要这备份机来做
[root@DBA01 ~]# cd /mnt/xvda/mysql_shell
[root@DBA01 mysql_shell]# which mysqldump
/bin/mysqldump[root@DBA01 mysql_shell]# vim wholebaseback.sh
#!/bin/bashecho "start all backup: 全库备份开始" >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
ttime=`date +"%Y-%m-%d_%H:%M:%S"`
echo $ttime >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
stime=`date +%s`#echo "start all backup:"
#ttime=`date +"%Y-%m-%d_%H:%M:%S"`
#echo $ttime/bin/mysqldump -uroot -p'root@1234' -hlocalhost --set-gtid-purged=OFF --single-transaction --triggers --routines --events --master-data=2 -A | gzip > /mnt/xvda/mysql_back/all_${ttime}.sql.gzecho "complete all backup: 全库备份结束" >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
ettime=`date +"%Y-%m-%d_%H:%M:%S"`
echo $ettime >> /mnt/xvda/mysql_scp/all_back_test_time_183.txtetime=`date +%s`s=$(($(( $etime - $stime))%60))
m=$(($(( $etime - $stime))/60%60))
h=$(($(( $etime - $stime))/60/60))echo "runtime "$h"h:"$m"m:"$s"s"  >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt# clean the log
aa=`cat /mnt/xvda/mysql_scp/all_back_test_time_183.txt | wc -l`
if [ $aa -gt 2000 ];thensed -i '1,10d' /mnt/xvda/mysql_scp/all_back_test_time_183.txt
fifind /mnt/xvda/mysql_back/  -name "*.sql.gz" -mtime +30 -exec rm {} \;
[root@DBA01 mysql_shell]# (3)准备 shell 相关脚本(分库备份脚本)测试这里  我把备份放在主库上   不合适,你们要这备份机来做
[root@DBA01 mysql_shell]# vim branchbaseback.sh
#!/bin/bashecho "start all backup: 分库备份开始" >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
ttime=`date +"%Y-%m-%d_%H:%M:%S"`
echo $ttime >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
stime=`date +%s`#echo "start databases backup::"
#ttime=`date +"%Y-%m-%d_%H:%M:%S"`
#echo $ttimefor dbname in `/bin/mysql -uroot -p'root@1234' -hlocalhost -e "show databases;"|grep -Evi "database|info|perfor|mysql|sys|test"`
do
echo $dbname
/bin/mysqldump -uroot -p'root@1234' -hlocalhost --set-gtid-purged=OFF -B --single-transaction --master-data=2 --set-gtid-purged=OFF  ${dbname}|gzip > /mnt/xvda/mysql_back/bak_${dbname}_$ttime.sql.gzdoneecho "complete all backup: 分库备份结束" >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
ettime=`date +"%Y-%m-%d_%H:%M:%S"`
echo $ettime >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt
etime=`date +%s`s=$(($(( $etime - $stime))%60))
m=$(($(( $etime - $stime))/60%60))
h=$(($(( $etime - $stime))/60/60))echo "runtime "$h"h:"$m"m:"$s"s"  >> /mnt/xvda/mysql_scp/all_back_test_time_183.txt# clean the log
aa=`cat /mnt/xvda/mysql_scp/all_back_test_time_183.txt | wc -l`
if [ $aa -gt 2000 ];thensed -i '1,10d' /mnt/xvda/mysql_scp/all_back_test_time_183.txt
fifind /mnt/xvda/mysql_back/ -name "*.sql.gz" -mtime +30 -exec rm {} \;
[root@DBA01 mysql_shell]# (4)准备 shell 相关脚本(磁盘信息,CPU,内存,数据库状态,数据库备份大小)测试这里  我把备份放在主库上   不合适,你们要这备份机来做
[root@DBA01 mysql_shell]# vim disk.sh
#/bin/bashbase_dir='/mnt/xvda/mysql_scp'
base_data='/mnt/xvda/mysql_back'
echo "start databases backup::"
ttime=`date +"%Y-%m-%d_%H:%M:%S"`
ttime1=`date "+%Y-%m-%d"`
echo $ttimedisk_check(){cat >> $base_dir/all_back_test_183.txt << EOF
`date +%Y-%m-%d` 数据备份服务器 192.168.33.51
/ `df -Th |awk '/root/{print $(NF-1)}'`
/mnt `df -Th |awk '/mnt/{print $(NF-1)}'`
EOF
}
disk_checkcpu_check(){
cat >> $base_dir/all_back_test_183.txt << EOF
`date +%Y-%m-%d` 数据备份服务器_CPU 192.168.33.51
`cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c | awk '{print $4,$1}'`
EOF
}
cpu_checkMemTotal_check(){
cat >> $base_dir/all_back_test_183.txt << EOF
`date +%Y-%m-%d` 数据备份服务器_内核 192.168.33.51
`cat /proc/meminfo | grep '^MemTotal:' /proc/meminfo | awk '{ mem=($2)/(1024)/(1024); printf "MemTotal: %0.0fGB\n",mem}'`
EOF
}
MemTotal_checkMysql_check(){cat >> $base_dir/all_back_test_183.txt << EOF
`date +%Y-%m-%d` 数据库服务器状态_MySQL 192.168.33.51
`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3306/) {print "mysqld OK";exit 0}}'`
EOF
}
Mysql_checksize_check(){cat >> $base_dir/all_back_test_183.txt << EOF
`date +%Y-%m-%d` 数据库备份大小 192.168.33.51
`ls $base_data/all_*${ttime1}* | xargs du -sh | sed "s#${base_data}/##g" | awk '{print $2,$1}'`
`ls $base_data/bak_*${ttime1}* | xargs du -sh | sed "s#${base_data}/##g" | awk '{print $2,$1}'`
EOF
}
size_check
[root@DBA01 mysql_shell]# (5)准备 shell 相关脚本(拷贝)请自行安装 expect 这个插件这里我就不教怎么安装了
[root@DBA01 mysql_shell]# vim scp.sh
#!/usr/bin/expect
set timeout -1
spawn bash -c "scp -r /mnt/xvda/mysql_scp/all_back_* root@192.168.33.50:/opt/source_data_lh/"
expect {"password" {send "root\r";}"yes/no" {send "yes\r";exp_continue}
}
expect eof
exit
[root@DBA01 mysql_shell]# (6)准备 shell 相关脚本(清除文件)
[root@DBA01 mysql_shell]# vim delete.sh
#!/bin/bash
dir=/mnt/xvda/mysql_scp           #//需要清空的目录名称
files=`ls ${dir}`
for file in $files
do
if [ -e ${dir}/${file} ];then
rm -f ${dir}/${file}
fi
done
[root@DBA01 mysql_shell]# (7)准备执行计划任务(添加)
[root@DBA01 mysql_shell]# crontab -l
00 02 * * * /bin/bash /mnt/xvda/mysql_shell/delete.sh >> /mnt/xvda/mysql_shell/log/delete.log
00 03 * * * /bin/bash /mnt/xvda/mysql_shell/wholebaseback.sh >> /mnt/xvda/mysql_shell/log/wholebaseback.log
40 03 * * * /bin/bash /mnt/xvda/mysql_shell/branchbaseback.sh >> /mnt/xvda/mysql_shell/log/branchbaseback.log
00 04 * * * /bin/bash /mnt/xvda/mysql_shell/disk.sh >> /mnt/xvda/mysql_shell/log/disk.log
00 05 * * * /usr/bin/expect /mnt/xvda/mysql_shell/scp.sh >> /mnt/xvda/mysql_shell/log/scp.log

三、从库准备 shell脚本 以及 文件路径(192.168.33.52)

(1)准备存放的相关文件路径
[root@DBA02 ~]# mkdir -p /storage/mysql_shell
[root@DBA02 ~]# mkdir -p /storage/mysql_shell/log
[root@DBA02 ~]# mkdir -p /software/mysql_scp
[root@DBA02 ~]# cd /software/mysql_scp/
[root@DBA02 ~]# touch disk_back_test_208.txt
[root@DBA02 ~]# touch sql_running_208.txt(2)准备 shell 相关脚本(磁盘信息,CPU,内存)
[root@DBA02 ~]# cd /storage/mysql_shell
[root@DBA02 mysql_shell]# vim disk.sh
#/bin/bashbase_dir='/software/mysql_scp'
echo "start databases backup::"
ttime=`date +"%Y-%m-%d_%H:%M:%S"`
ttime1=`date "+%Y-%m-%d"`
echo $ttimedisk_check(){cat >> $base_dir/disk_back_test_208.txt <> $base_dir/disk_back_test_208.txt <> $base_dir/disk_back_test_208.txt <> $base_dir/sql_running_208.txt <2{if ($4 ~ /.*:3306/) {print "mysqld OK";exit 0}}'`
EOF
}
Mysql_checkMysql_run(){cat >> $base_dir/sql_running_208.txt <> $base_dir/sql_running_208.txt
#/storage/mysql/app/mysql/bin/mysql -uroot -p'root@1234' -e "show slave status\G" | grep -iE "running:" | awk '{print $1,$2}'
#/storage/mysql/app/mysql/bin/mysql -uroot -p'root@1234' -e "show slave status\G" | grep -iE slave_io_running: | awk '{print $1,$2}'
#/storage/mysql/app/mysql/bin/mysql -uroot -p'root@1234' -e "show slave status\G" | grep -iE slave_sql_running: | awk '{print $1,$2}'
[root@DBA02 mysql_shell]#(4)准备 shell 相关脚本(拷贝)请自行安装 expect 这个插件这里我就不教怎么安装了
[root@DBA02 mysql_shell]# vim scp.sh
#!/usr/bin/expect
set timeout -1
spawn bash -c "scp -r /software/mysql_scp/* root@192.168.33.50:/opt/source_data_lh/"
expect {"password" {send "root\r";}"yes/no" {send "yes\r";exp_continue}
}
expect eof
exit
[root@DBA01 mysql_shell]# (5)准备 shell 相关脚本(清除文件)
[root@DBA02 mysql_shell]# vim delete.sh
#!/bin/bash
dir=/software/mysql_scp           #//需要清空的目录名称
files=`ls ${dir}`
for file in $files
do
if [ -e ${dir}/${file} ];then
rm -f ${dir}/${file}
fi
done
[root@DBA01 mysql_shell]# (6)准备执行计划任务(添加)
[root@DBA02 mysql_shell]# crontab -l
00 02 * * * /bin/bash /storage/mysql_shell/delete.sh >> /storage/mysql_shell/log/delete.log
00 04 * * * /bin/bash /storage/mysql_shell/disk.sh >> /storage/mysql_shell/log/disk.log
30 04 * * * /bin/bash /storage/mysql_shell/mysql_running.sh >> /storage/mysql_shell/log/mysql_running.log
30 05 * * * /usr/bin/expect /storage/mysql_shell/scp.sh >> /storage/mysql_shell/log/scp.log

四、巡检数据库操作(192.168.33.50)

(1)在数据库(192.168.33.50)建立对应的库和表。作为 shell 脚本获取的数据插入到数据库表(主从环境,需要两张表 inspection_yjk 为主表  inspection_yjk_208 为从表)
[root@DBA ~]# mysql -uroot -p'*******'
mysql> create database ABC;
Query OK, 1 row affected (0.00 sec)mysql> use ABC;
mysql> CREATE TABLE `inspection_yjk` (->   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '逻辑id',->   `date` varchar(200) NOT NULL DEFAULT '' COMMENT '日期',->   `beifenji_gen` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机根容量大小',->   `beifenji_mnt` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机/mnt容量大小',->   `beifenji_cpu` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机/CPU容量大小',->   `beifenji_MemTotal` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机/MemTotal容量大小',->   `Run_MySQL` varchar(255) NOT NULL DEFAULT '' COMMENT '服务器,mysql运行情况',->   `yjk_all_size` varchar(255) NOT NULL DEFAULT '' COMMENT '易监控项目,全库备份大小',->   `yjk_all_runtime` varchar(255) NOT NULL DEFAULT '' COMMENT '易监控项目,全库备份时间',->   `yjk_jk` varchar(255) NOT NULL DEFAULT '' COMMENT '易监控项目,jk库备份大小',->   `yjk_jkproduct` varchar(255) NOT NULL DEFAULT '' COMMENT '易监控项目,jkproduct库备份大小',->   `yjk_fenku_runtime` varchar(255) NOT NULL DEFAULT '' COMMENT '易监控项目,分库备份时间',->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='易监控项目数据库巡检表';
Query OK, 0 rows affected (0.03 sec)mysql> CREATE TABLE `inspection_yjk_208` (->   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '逻辑id',->   `date` varchar(200) NOT NULL DEFAULT '' COMMENT '日期',->   `gen` varchar(255) NOT NULL DEFAULT '' COMMENT '208服务器,根容量情况',->   `storage` varchar(255) NOT NULL DEFAULT '' COMMENT '208服务器,(/storage容量情况)',->   `beifenji_cpu` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机/CPU容量大小',->   `beifenji_MemTotal` varchar(255) NOT NULL DEFAULT '' COMMENT '备份机/MemTotal容量大小',->   `Run_MySQL` varchar(255) NOT NULL DEFAULT '' COMMENT '208服务器,mysql运行情况',->   `Slave_IO_Running` varchar(255) NOT NULL DEFAULT '' COMMENT '208服务器,(Mysql 主从状态)',->   `Slave_SQL_Running` varchar(255) NOT NULL DEFAULT '' COMMENT '208服务器,(Mysql 主从状态)',->   `entryname` varchar(255) NOT NULL DEFAULT '' COMMENT '项目名称',->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='易监控数据库巡检表';
Query OK, 0 rows affected (0.01 sec)mysql> quit;
Bye
[root@DBA ~]#(2)创建对应的文件目录(192.168.33.51/192.168.33.52 传过来的文件存放地址)这一步骤执行完成之后  在(192.168.33.51/192.168.33.52) 执行除了 delete.sh 脚本外都执行
[root@DBA ~]# mkdir -p /opt/source_data_lh(3)准备 shell 相关脚本(MySQL 插入文件脚本——1)
[root@DBA ~]# which mysql
/mysql/app/mysql/bin/mysql[root@DBA ~]# vim /opt/auto_inspection_yjk_208.sh
#!/bin/bash# define the datetimeff=$(echo `date +"%Y-%m-%d"`)# define the variable of 208
date=`awk 'NR==1{print $1}' /opt/source_data_lh/disk_back_test_208.txt`
gen=`awk 'NR==2{print $2}' /opt/source_data_lh/disk_back_test_208.txt`
storage=`awk 'NR==3{print $2}' /opt/source_data_lh/disk_back_test_208.txt`
beifenji_cpu=`awk 'NR==5{print $2}' /opt/source_data_lh/disk_back_test_208.txt`
beifenji_memtotal=`awk 'NR==7{print $2}' /opt/source_data_lh/disk_back_test_208.txt`
Run_MySQL=`awk 'NR==2{print $2}' /opt/source_data_lh/sql_running_208.txt`
Slave_IO_Running=`awk 'NR==4{print $2}' /opt/source_data_lh/sql_running_208.txt`
Slave_SQL_Running=`awk 'NR==5{print $2}' /opt/source_data_lh/sql_running_208.txt`
entryname=`awk 'NR==6{print $1}' /opt/source_data_lh/sql_running_208.txt`/mysql/app/mysql/bin/mysql  -uroot -p'root@1234' -e "INSERT INTO  ABC.inspection_yjk_208(date,gen,storage,beifenji_cpu,beifenji_memtotal,Run_MySQL,Slave_IO_Running,Slave_SQL_Running,entryname) VALUES ('$date','$gen','$storage','$beifenji_cpu','$beifenji_memtotal','$Run_MySQL','$Slave_IO_Running','$Slave_SQL_Running','$entryname');" 1>/opt/auto_inspection_yjk.log 2>&1
[root@DBA ~]# (4)准备 shell 相关脚本(MySQL 插入文件脚本——2)
[root@DBA ~]# vim /opt/auto_inspection_yjk.sh
#!/bin/bash# define the datetimeff=$(echo `date +"%Y-%m-%d"`)# define the variable of 196
date=`awk 'NR==1{print $1}' /opt/source_data_lh/all_back_test_183.txt`
yjk_beifenji_gen=`awk 'NR==2{print $2}' /opt/source_data_lh/all_back_test_183.txt`
yjk_beifenji_mnt=`awk 'NR==3{print $2}' /opt/source_data_lh/all_back_test_183.txt`
beifenji_cpu=`awk 'NR==5{print $2}' /opt/source_data_lh/all_back_test_183.txt`
beifenji_memtotal=`awk 'NR==7{print $2}' /opt/source_data_lh/all_back_test_183.txt`
Run_mysql=`awk 'NR==9{print $2}' /opt/source_data_lh/all_back_test_183.txt`
yjk_all_size=`awk 'NR==11{print $2}' /opt/source_data_lh/all_back_test_183.txt`
yjk_all_runtime=`awk 'NR==5{print $2}' /opt/source_data_lh/all_back_test_time_183.txt`
yjk_jk_size=`awk 'NR==12{print $2}' /opt/source_data_lh/all_back_test_183.txt`
yjk_jkproduct_size=`awk 'NR==13{print $2}' /opt/source_data_lh/all_back_test_183.txt`
yjk_fenku_runtime=`awk 'NR==10{print $2}' /opt/source_data_lh/all_back_test_time_183.txt`/mysql/app/mysql/bin/mysql -uroot -p'root@1234' -e "INSERT INTO ABC.inspection_yjk(date,beifenji_gen,beifenji_mnt,beifenji_cpu,beifenji_memtotal,Run_mysql,yjk_all_size,yjk_all_runtime,yjk_jk,yjk_jkproduct,yjk_fenku_runtime)VALUES('$date','$yjk_beifenji_gen','$yjk_beifenji_mnt','$beifenji_cpu','$beifenji_memtotal','$Run_mysql','$yjk_all_size','$yjk_all_runtime','$yjk_jk_size','$yjk_jkproduct_size','$yjk_fenku_runtime');" 1>/opt/auto_inspection_yjk.log 2>&1
[root@DBA ~]# (5)准备 shell 相关脚本(脚本管理脚本)
[root@DBA ~]# vim /opt/auto_inspection_2.sh
/bin/bash /opt/auto_inspection_yjk.sh
/bin/bash /opt/auto_inspection_yjk_208.sh
[root@DBA ~]# (6)准备执行计划任务(添加)
[root@DBA ~]# crontab -l
30 07 * * * /bin/bash /opt/auto_inspection_2.sh 1>/dev/null 2>&1(7)总结:
这些脚本循环使用就可以检查数据库是否都在运行,以及运行的情况,当然脚本可根据需求合理安排!数据库要插入数据,必须在 192.168.33.51/192.168.33.52 上执行除了 delete.sh 脚本以外的脚本都执行保证 192.168.33.50  /opt/source_data_lh/  目录下有如下四个文件
all_back_test_183.txt
all_back_test_time_183.txt
disk_back_test_208.txt
sql_running_208.txt每天只需要到 192.168.33.50 用 Navicat MySQL 工具连接   进入 ABC 这个库,查看对应的表数据信息,就可以了!这样我们每天都是在巡检数据库了!

联系人

姓名:李红
电话:13817757494
QQ号:1322734677
微信号:13817757494

数据库监控设计-DBA-专属相关推荐

  1. 从 DBA 向数据库产品设计与研发转型,你准备好了吗?

    这是一个最好的时代,新技术突飞猛进,需求和机会层见迭出: 这是一个最坏的时代,新挑战层出不穷,困惑与焦虑随处不在. 云计算与智能技术迅速发展,"DBA行业将死,趁早转行"的言论甚嚣 ...

  2. 看到外卖平台这样改善数据库架构,DBA表示放心了

    本文根据虢国飞老师在dbaplus社群[2019年1月5日数据架构与优化沙龙上海站]现场演讲内容整理而成, 讲师介绍 虢国飞 饿了么数据技术部负责人 从事数据库行业十余年,专注于 MySQL.PGSQ ...

  3. 从Zabbix到Prometheus,同程艺龙数据库监控系统的实践

    来自:DBAplus社群 作者介绍 闫晓宇,同程艺龙数据库技术专家,具有多年互联网行业DB运维经验,在游戏.O2O及电商行业从事过DBA运维工作.2016年加入同程艺龙,目前在团队负责数据库架构设计及 ...

  4. 数据库性能测试---前阿里数据库团队资深DBA杨奇龙

    杨奇龙 前阿里数据库团队资深DBA 主要负责淘宝业务线,经历多次11.11,有海量业务访问DB架构设计经验. 目前就职于有赞科技DBA,负责数据库运维工作,熟悉MySQL 性能优化,故障诊断,性能压测 ...

  5. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  6. 万字归纳总结 | 数据库表设计与SQL编写技巧

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...

  7. 浅析小程序云原生数据库的设计与应用

    作者 腾讯TEG云架构平台部 研发工程师 杨哲.刘翔 腾讯CSIG云产品部 前端工程师 王伟嘉 导语 小程序云开发拥有易接入.高性能.高可用等特性,提供完整的原生云端能力支持,可有效降低后端与运维成本 ...

  8. 小程序云原生数据库的设计与应用,想要知道的都在这里!

    小程序云开发拥有易接入.高性能.高可用等特性,提供完整的原生云端能力支持,可有效降低后端与运维成本,帮助开发者更专注于业务,实现快速上线与迭代.其中,小程序云开发的数据库是一个既可在小程序前端操作.也 ...

  9. 数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)

    http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Da ...

最新文章

  1. 怕了么?三年后,人工智能将彻底改变前端开发?
  2. case分支 shell函数 字符串的处理
  3. 模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记
  4. 【Android 界面效果22】Android的Tab与TabHost
  5. Spark自带的集群模式(Standalone),Spark/Spark-ha集群搭建
  6. 数据泄漏防御在企业的应用
  7. 23种设计模式之命令模式
  8. 饥荒进地洞服务器无响应,饥荒联机洞穴设置及常见问题的解决方法
  9. python小游戏-16行代码实现3D撞球小游戏!-源码下载
  10. JZOJ 3515. 软件公司
  11. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例
  12. Java程序员需要了解的几个开源协议介绍
  13. Office文件格式兼容包FileFormatConverters(office 2010)
  14. 计算机硬件 试题库,计算机硬件维护-试题库
  15. 【知识点总结】电力拖动系统——交流调速系统
  16. OpenNLP中关于语言检测的语料训练
  17. 2021-09-25 WPF上位机 29-3D绘图的对象,变形,鼠标操控,鼠标事件,2D在3D中展示
  18. html纵向广告滚动,jquery广告滚动 jquery 实现文字左右滚动
  19. TPO “Java运行环境未找到”
  20. 【JS】json导出到excel,自定义文件名和后缀名

热门文章

  1. 浏览器 pad android,腾讯发布 QQ浏览器 HD for Android Pad,加速布局手机浏览器
  2. DX11小知识1-Direct 3D
  3. EMC VNX5000系列NAS配置手册
  4. CMAIL4.0 server 脚本字段解释
  5. 思科 计算机网络 第四章测试考试答案
  6. networkIssue
  7. angular 4 拼接url
  8. 循环码的概念以及拓展
  9. linux 日历软件,云日历linux版下载
  10. requests实例3:百度360搜索引擎关键字提交