Mysql优化

Mysql优化常用的指令: show processlist;  show full processlist; 显示用户正在执行的线程,数据来自mysql系统数据库information_schema库中的processlist表,一般这条指令用来显示正在执行的sql语句,比如MySQL报错"too many connections"时候,可用用他来查询,查询的线程(ID)可以用kill指令杀死。没有full关键词的话,只显示前100条。 show open tables;  show open tables from xxdatabase; 显示缓存表中打开的非临时表,

mysql开启慢查询日志

vi /etc/my.cnf 在 [mysqld] 下加入 slow_query_log = 1  #开启慢查询日志 slow_query_log_file = /var/log/mysql-slow.log  #指定日志存放地址,mysql5.5及之前版本 log-slow-queries long_query_time = 1  #设置多久视为慢查询 chown mysql:mysql -R /var/log/musql-slow.log 重启mysql 查看设置的变量 mysql> show variables like '%slow%'; +—————————+————————-+ | Variable_name             | Value                   | +—————————+————————-+ | log_slow_admin_statements | OFF                     | | log_slow_slave_statements | OFF                     | | slow_launch_time          | 2                       | | slow_query_log            | ON                      | | slow_query_log_file       | /var/log/mysql-slow.log | +—————————+————————-+ 5 rows in set (0.00 sec) mysql> show variables like 'long_query_time'; +—————–+———-+ | Variable_name   | Value    | +—————–+———-+ | long_query_time | 1.000000 | +—————–+———-+ 1 row in set (0.00 sec) 模拟查询 SELECT SLEEP(5); 查看mysql-slow.log文件 /usr/local/mysql/bin/mysqld, Version: 5.6.40-log (Source distribution). started with: Tcp port: 3306  Unix socket: /tmp/mysql.sock Time                 Id Command    Argument # Time: 181127 19:07:05 # User@Host: root[root] @ localhost []  Id:     1 # Query_time: 5.000253  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0 SET timestamp=1543316825; select sleep(5); 查询mysql连接数 mysql> SHOW status like 'Threads%'; +——————-+——-+ | Variable_name     | Value | +——————-+——-+ | Threads_cached    | 1     | | Threads_connected | 1     | | Threads_created   | 2     | | Threads_running   | 1     | +——————-+——-+ 4 rows in set (0.00 sec) 查询mysql配置最大连接数 mysql> show variables like 'max_connections'; +—————–+——-+ | Variable_name   | Value | +—————–+——-+ … Read more

Mysql批量删除相同前缀的表

今天上午想备份一下微擎的数据库哎,打开phpmyadmin一看好几百张表,有些表是之前安装的应用自带的,现在不用了,不想备份这谢谢表了,就想着批量把相同前缀的这些表删掉。这里只写具体方法: use information_schema; SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) AS statement FROM information_schema.tables WHERE table_schema = 'jiaozhou' AND table_name LIKE 'ims_mihua%'; 查询出来后,得到的statement语句形如下面这种格式: DROP TABLE ims_mihua_sq_account,ims_mihua_sq_address,ims_mihua_sq_admin,ims_mihua_sq_adv,ims_mihua_sq_area,ims_mihua_sq_balance,ims_mihua_sq_black,ims_mihua_sq_cart,ims_mihua_sq_cash,ims_mihua_sq_channel,ims_mihua_sq_chat,ims_mihua_sq_city,ims_mihua_sq_citys,ims_mihua_sq_collect,ims_mihua_sq_comment,ims_mihua_sq_discount,ims_mihua_sq_discount_record,ims_mihua_sq_fields,ims_mihua_sq_footmark,ims_mihua_sq_get_redpackage,ims_mihua_sq_goods,ims_mihua_sq_goods_cate,ims_mihua_sq_group,ims_mihua_sq_info,ims_mihua_sq_info_comment,ims_mihua_sq_infoorder,ims_mihua_sq_integral,ims_mihua_sq_member,ims_mihua_sq_msg,ims_mihua_sq_mstime,ims_mihua_sq_option,ims_mihua_sq_order,ims_mihua_sq_order_goods,ims_mihua_sq_order_record,ims_mihua_sq_param,ims_mihua_sq_qiandao,ims_mihua_sq_redmsg,ims_mihua_sq_redpackage,ims_mihua_sq_refund,ims_mihua_sq_ring,ims_mihua_sq_ring_zan,ims_mihua_sq_sensitiveword,ims_mihua_sq_share_history,ims_mihua_sq_shop,ims_mihua_sq_shop_admin,ims_mihua_sq_shop_apply,ims_mihua_sq_shop_cate,ims_mihua_sq_shop_cfg,ims_mi; 复制sql语句到phpmyadmin里面执行一下就ok了  2018.10.10补充 最近发现用group_concat 如果查询字段过长会出现查询数据展示不全的问题,原因是group_concat 有个默认长度配置  group_concat_max_len  用  show varialbes like 'group_concat_max_len' 可以查询该长度  默认是1024 那么解决方法就是改变这个配置咯   SET SESSION group_concat_max_len = 10240; or SET GLOBAL group_concat_max_len = 10240; 接下来在查询一下 : SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name SEPARATOR ' ') , ';' ) AS statement FROM information_schema.tables WHERE table_schema = 'wq' AND table_name LIKE 'ims_ewei%'; 完美~

Mysql存储base64图片引发的问题

今天运营跑过来问我说编辑器的文章提交后存储不了,首先我想到的是是不是后端小伙伴是不是在数据库表设计的时候用的varchar 或者text超过了长度限制,然而检查了一下并不是。 查阅了半天文档发现是mysql配置的问题,解决方法当然是修改mysql配置了: /etc/my.cnf下,max_allowed_packet默认是1M,改成10M重启mysql就ok了。 max_allowed_packet是mysql服务端和客户端消息的最大限制配置,由于前端编辑器把上传的图片都转换成了base64编码,图片上传的多的时候会超过max_allowed_packet默认配置,所以保存不了。 参考官方文档:  https://dev.mysql.com/doc/refman/8.0/en/replication-features-max-allowed-packet.html

Mysql报错:Invalid datetime format: 1292 Truncated incorrect DOUBLE value: 问题及解决办法

今天oauth登陆遇到个问题,第一次登陆没啥为题,第二次登陆mysql报错:Invalid datetime format: 1292 Truncated incorrect DOUBLE value: ‘xxxxxxxxx’ google一下原因表的字段‘openid’是varchar类型,oauth获取github accesstoken返回的是一个数字,解决方法就是把数字转换成字符串咯~    $openid.""

Mysql添加用户

#连接mysql mysql -u root -p #创建用户 create USER "adam"@"localhost" identified by '你的密码'; #查看用户列表 select CONCAT('User:',user,'@',host) from mysql.user; 输出 +——————————-+ | CONCAT('User:',user,'@',host) | +——————————-+ | User:adam@localhost           | | User:mysql.session@localhost  | | User:mysql.sys@localhost      | | User:root@localhost           | +——————————-+ 4 rows in set (0.00 sec) #分配权限   grant all privileges on wohuanicai.* to 'adam'@'localhost' identified by '你的密码';    #Over

Mysql 查看所有用户

 #查看所有用户 select CONCAT('User:',user,'@',host) from mysql.user; 输出: | CONCAT('User:',user,'@',host) | +——————————-+ | User:adam@%                   | | User:root@127.0.0.1           | | User:root@::1                 | | User:adam@localhost           | | User:quan@localhost           | | User:root@localhost           | +——————————-+ 6 rows in set (0.00 sec) #查看用户权限 show grants for 'adam'@'localhost'; 输出: +————————————————————————————————————-+ | GRANT USAGE ON *.* TO 'adam'@'localhost' IDENTIFIED BY PASSWORD '*B2652B2C91E14A2B0088107BB28698EA57F78E01' | | GRANT ALL PRIVILEGES ON `wujin`.* TO 'adam'@'localhost'                                                     | +————————————————————————————————————-+ 2 rows in set (0.00 sec)