在工作中会经常对数据库进行运维操作,例如大表清理等等统计数据库占用的空间统计同一个实例下面的所有数据库的容量大小SELECT  table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)', sum(truncate(DATA_FREE/1024/1024, 2)) as '碎片占用(MB)' from information_schema.tables group by table_sch
  起源        最近发下很多人在我的python课程下面提问,关于执行python 定时器Job会报错 如下In aggregated query without GROUP BY, expression #1 of SELECT list contains出现原因        在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为group by 之后,返回的一些数据是不确定的,所以才会出现这个错误。解决方案        我们知道了原因,就可以去找到对应的解决方法,主要都是修改
缘由    由于公司系统相对来说还是挺多的,定时任务也非常多,一直使用crontab配置存在几个问题。这几个问题只要使用该方式应该都会深有感触。问题一管理维护问题:定时Job太多,不清楚总共有多个Job,不知道每个Job到底是谁写的主要功能是什么。如果Job部署在多台服务器那就更要人命了问题二调度监控问题:crontab在一定程度上解决了调度问题,但是调度不光光是运行状态。在实际工作中还会关注,什么时间运行的,运行了多长时间,运行状态,消耗多少内存等等技术选型    该项目使用python语言开发,其实用php等其他语言也是可以的。但是对于这一类运维类系统 使用Python开发比较容易维护些。而使用Python的话,我们也可以基于前面介绍的 Flask CMS V2框架。该Jobs系统应该也算是第一个基于我们 Flask CMS V2 开发的应用项目了。功能特性教程文档Jobs(乔布斯)管理调度平台 
缘由    我在工作过程中发现,我们经常会开发很多相同类似的东西,每一次都是从零开始,既浪费时间还没有意义,基本都是复制。我个人认为我们应该把很多基础东西开发好 以后所有其他的应用系统都基于这个上面进行开发,既可以让基础越来越丰富,也可以统一维护。    学过我Python视频课程的应该知道,我都是用了同一个自己整理过的 Flask 框架。用的多了慢慢就整理和优化了很多技巧。技术选型    有很多人肯定有疑问,为什么我们要选择Flask,其实这个我觉得是根据个人使用习惯的,网上也有很多人对比了不少框架的。我个人用过Django 和 Flask 这两个框架,其实我觉得区别没有那么大,一定要说一个理由:Flask 比较容易入门,可以根据自己的想法改成自己想要的模式。    很早以前使用Django唯一的感觉是配置有点混乱(相对比Flask),但是经过这么
  缘由        大家都知道我们做一个客服系统,是基于websocket长连接服务的。在这些长连接服务进程中,会对数据库有些操作。建议尽量在这些长连接服务中,少查询数据,能用缓存都用缓存。我们都知道数据库服务保持连接是有时间限制的,过了时间在操作数据库会出现错误:MySQL server has gone away。这里就要用到数据库重连机制来实现了        我们的客服系统使用的MVC框架是Yii2,大家都知道我一直使用这个框架,其他的框架基本不怎么熟悉。那我们就看看基于Yii2 如何实现数据库断开重连机制解决思路        在很多编程语言里面有一个概念:连接池。在世界上最好的语言php世界里目前这块成熟的还是比较少的,这个主要是php的以
缘由最近我们公司的慢SQL特别多,特别是某个固定的表,每天基本都有好几千的慢查询,但是这个表有特别大,不能随意加索引,索引我们就需要一个工具来协助我们进行改DDL的时候,不影响业务,那就是 PT工具效果图如下是慢SQL数量折线图 明显可以看到大幅度下降了使用场景在线数据库的维护中,总会涉及到研发修改表结构的情况,修改一些小表影响很小,而修改大表时,往往影响业务的正常运转,如表数据量超过500W,1000W,甚至过亿时在线修改大表的可能影响在线修改大表的表结构执行时间往往不可预估,一般时间较长由于修改表结构是表级锁,因此在修改表结构时,影响表写入操作如果长时间的修改表结构,中途修改失败,由于修改表结构是一个事务,因此失败后会还原表结构,在这个过程中表都是锁着不可写入修改大表结构容易导致数据库CPU、IO等性能消耗,使MySQL服务器性能降低在线修改大表结构容易导致主从延时,从而影响业务读取pt-online-schema-change介绍pt-online-schema-change是pe
缘由最近由于工作调整,很多基础工作都要准备。对我们研发来讲,代码写完了还需要部署到生产环境。那就无法避免的要部署生产服务器的环境。由于软件一直会有更新迭代。这里我们就说下MySQL8.0在CentOS7安装的一个全过程配置源由于默认源已经不再有MySQL软件信息了,所以需要自己去官方下载并安装wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm  yum localinstall  mysql80-community-release-el7-3.noarch.rpm yum install mysql-community-client mysql-community-server服务操作service mysqld start #启动 service mysqld r
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED2、VARCHAR的长度只分配真正需要的空间3、使用枚举或整数代替字符串类型4、尽量使用TIMESTAMP而非DATETIME,5、单表不要有太多字段,建议在20以内6、避免使用NULL字段,很难查询优化且占用额外索引空间7、用整型来存IP索引1、索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描2、应尽量避免在WH
需求在树莓派上 安装Mysql 服务,并开启远程访问步骤安装 mysql server$ sudo apt-get install mysql-server我以为中间会让我提示输入 数据库root的密码,没想到一帆风顺,直接完成,我要疯了,密码到底是什么了。通过搜索发现,可以使用如下命令,空密码登录$ sudo mysql -u root设置root密码use mysql; update user set plugin='mysql_native_password' where user='root'; UPDATE user SET password=PASSWORD('你自己的密码') WHERE user='root'; flush
缘由我们程序员难免要和数据库打交道,经过这几年的锻炼,感觉手写SQL语句已经忘记的差不错了,促使我一定要这篇文章的原因是,有一次晚上我更新某个系统的数据库的表(由于目前公司比较严格,数据库都只能通过命令行访问,无法通过GUI工具操作),然后由于where 条件写错了,然后数据更新错了不少。痛定思痛:用好的工具来避免这种情况,那就是phpMyadminphpMyadminphpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写
  问题最近遇到一个这样的问题,新建数据库表的时候 提示 错误如下Invalid default value for 'created_time' timestamp field语句如下`created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入时间' 错误大致的意思 就是不能为 timestamp字段设置指定的默认值,也就是语句中的 0000-00-00 00:00:00,但是很奇怪在本地就可以,为什么线上服务器就不行了?本地数据库版本:5.5.46 上线数据库版本:5.7.17后来经过查询文档(文档地址)发现,其实从5.6.17这个版本就默认设置了不允许插入 0 日期了,术语是 NO_ZERO_IN_DA
前言在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一。要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改慢日志设置方式写入文件写入数据库实践操作方式一:写入文件编辑my.conf 中修改 log_slow_queries 的日志地址$ cd /etc/mysql $ cat my.cnf |grep slow  log_slow_queries = /data/logs/mysql/mysql-slow.log $ sudo /etc/init.d/mysql restart简单验证$ mysql -uroot -p mysql> show variables like '%slow_query_log%'; +----------------
  AppArmor 是一款与SeLinux类似的安全框架/工具,其主要作用是控制应用程序的各种权限,例如对某个目录/文件的读/写,对网络端口的打开/读/写等等。 来之Novell网站的引用:AppArmor is designed to provide easy-to-use application security for both servers and workstations. Novell AppArmor is an access control system that lets you specify per program which files the program may read, write, and execute. AppArmor secures applications by enforcing good application behavior without relying on attack signatures, so it can pr
  最近在做项目的过程中发现了一个问题数据库表 test  有个字段是 target_id  int(11),这个字段可能为零使用如下查询select * from test where target_id = ''; select * from test where target_id = 'abcd';这样,所有target_id = 0 的结果都会出来,为什么?查阅资料,这是类型转化导致的,在mysql中  0  意味着 任何字符串其实不是mysql特有了,在php中有个intval 方法将字符串转化为数字intval("abcd");//0 intval("99a");//99 intval("a99");//0 intval("99");//99我相信大家应该都明白了吧,哈哈
  中文乱码是因为编码集不支持,所以要改变编码先查看下设置的编码使用如下命令show variables like 'character%';在 mysql.conf (Ubuntu mysql5.5)中的 [client]区域加上 default-character-set = utf8在[mysqld]区域加上character_set_server = utf8重启服务
  今天手贱,看到mysql 的日志在/var/log/mysql下面。总是觉得别扭,于是就想改变日志的位置,本人开发环境 vagrant  + ubuntu12.04 ,在/etc/mysql/mysql中修改了general_log的位置,放在/data/logs/mysql下面然后重启服务,service mysql restart查看错误日志发现说 /usr/sbin/mysqld: File '/data/logs/mysql/mysql.log' not found (Errcode: 13)150830  0:02:44 [ERROR] Could not use /data/logs/mysql/mysql.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on
  1.mysqlbinlog工具使用方法如下:先使用 show binary logs 查看在使用导出命令mysqlbinlog -R -uroot -pxxxx -hxxx.xxx.xxx.xxx -d db_name  --base64-output=decode-rows  --start-datetime='2015-08-13 13:11:21'  --stop-datetime="2015-08-13 13:18:21" mysql-bin.000008 > mysql-bin.ran_trade_08_13.sql2.mysqldump使用方法如下:# 备份单个数据库 mysqldump  --skip-opt  -u
  • 微信公众号 微信小程序
  • 微信机器人
  • 群1:1046090432
  • 群2:585567981