欢迎光临
我们一直在努力

MySQL 8.0 执行 insert 插入数据非常缓慢的问题及解决方法

sangco阅读(1048)

[mysqld]
skip-log-bin
# disable_log_bin # Linux下可使用这个
# transaction_write_set_extraction=OFF
#其中 skip-log-bin 和 disable_log_bin 作用是一样的,如果一个无效,可以尝试另一个
innodb_flush_log_at_trx_commit=2
#此配置用于mysql的操作日志先存入缓存再写磁盘,从而提高mysql的性能,但有一定的安全性能
sync_binlog = 2000
#此配置用于修改写多少次二进制日志后再写入磁盘的操作,从而提高mysql的性能,但有一定的安全性能

 

ThinkPHP下Sql搜索'or'组合语法

sangco阅读(2619)

$map['is_neibu'] = 0;
$twhere['username']  = array('like', '%'.$nickname.'%');
$twhere['nickname']  = array('like','%'.$nickname.'%');
$twhere['_logic'] ='or';
$map['_complex'] = $twhere;   //or条件完成
$count = $member->where($map)->count();

mysql 开启慢查询 清空slow_log日志或者slow_log表

sangco阅读(2520)

show variableslike ‘%log_output%’;– 默认是FILE

show variableslike ‘%quer%’;

— log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

— log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询

— slow_query_log 默认是OFF,表示是否打开慢查询

— long_query_time默认是 10.000000,表示记录超过时间的慢查询

— 打开慢查询,记录查询时间超过5秒的慢查询,讲慢查询结果输出至slow_log表中

set global slow_query_log = ON;

SET GLOBAL long_query_time = 5;– 10.000000

— SET GLOBAL log_queries_not_using_indexes = ON;– 是否打开看个人需要

set global log_output=’TABLE’;– FILE

select * from mysql.slow_log order by start_time desc;

以下代码恢复慢查询的参数设置情况 

SET global slow_query_log = OFF;

SET GLOBAL long_query_time = 10.000000;

SET GLOBAL log_queries_not_using_indexes = OFF;

SET global log_output=’FILE’;– FILE

— 清空慢查询日志

show variables like ‘%slow%’;

+———————+——————————————+

| Variable_name |Value |

+———————+——————————————+

| log_slow_queries| ON |

| slow_launch_time| 2 |

| slow_query_log |ON |

|slow_query_log_file | /data/mysql/slow_queries_3306.log |

+———————+——————————————+

4 rows in set(0.00 sec)

show variables like ‘log_output%’;

log_output   FILE

— 关闭日志输出

set global slow_query_log=0;

show variables like ‘%slow%’;

+———————+——————————————+

| Variable_name |Value |

+———————+——————————————+

| log_slow_queries| OFF |

| slow_launch_time| 2 |

| slow_query_log |OFF |

|slow_query_log_file | /data/mysql/slow_queries_3306.log |

+———————+——————————————+

4 rows in set(0.00 sec)

set global slow_query_log_file=’/data/mysql/new-slow.log’;

Query OK, 0 rowsaffected (0.03 sec)

set global slow_query_log=1;

Query OK, 0 rowsaffected (0.01 sec)

show variables like ‘%slow%’;

+———————+———————————————-+

| Variable_name |Value |

+———————+———————————————-+

| log_slow_queries| ON |

| slow_launch_time| 2 |

| slow_query_log |ON |

|slow_query_log_file | /data/mysql/new_slow.log |

+———————+———————————————-+

4 rows in set(0.00 sec)

show variableslike ‘%log_output%’;– 目前是FILE

mysql> selectsleep(10) as a, 1 as b;

+—+—+

| a | b |

+—+—+

| 0 | 1 |

+—+—+

1 row in set(10.00 sec)

[mysql@xxx-xxx ~]

$more /data/mysql/new-slow.log

6, backup the oldbig slow log file to other directory.

— 清空slow_log表

select * from mysql.slow_log;

SET GLOBALslow_query_log = ‘OFF’;

ALTER TABLE mysql.slow_log RENAME mysql.slow_log_drop;

CREATE TABLE slow_log (

 start_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP,

  user_hostmediumtext NOT NULL,

 query_time time NOT NULL,

  lock_timetime NOT NULL,

  rows_sentint(11) NOT NULL,

 rows_examined int(11) NOT NULL,

  dbvarchar(512) NOT NULL,

 last_insert_id int(11) NOT NULL,

  insert_idint(11) NOT NULL,

  server_idint(10) unsigned NOT NULL,

  sql_textmediumtext NOT NULL

) ENGINE=CSVDEFAULT CHARSET=utf8 COMMENT=’Slow log’;

SET GLOBAL slow_query_log = ‘ON’;

DROP TABLE mysql.slow_log_drop;
————————————————
版权声明:本文为CSDN博主「zhonglijun_05」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhonglijun_05/article/details/53333545

MySQL 清理slowlog方法

sangco阅读(2359)

SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log RENAME mysql.slow_log_drop;
CREATE TABLE mysql.slow_log LIKE mysql.slow_log_drop;
SET GLOBAL slow_query_log = 'ON';
DROP TABLE mysql.slow_log_drop;

更改MySQL数据库的编码为utf8mb4

sangco阅读(2343)

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常:

java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)

可以对4字节的字符进行编码存储,然后取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 
采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

更改数据库的编码为utf8mb4:

1. MySQL的版本

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

2. MySQL驱动

5.1.34可用,最低不能低于5.1.13

3.修改MySQL配置文件

修改mysql配置文件my.cnf(windows为my.ini) 
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: 
[client] 
default-character-set = utf8mb4 
[mysql] 
default-character-set = utf8mb4 
[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init_connect=’SET NAMES utf8mb4′

4. 重启数据库,检查变量

SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’;

Variable_nameValue
character_set_clientutf8mb4
character_set_connectionutf8mb4
character_set_databaseutf8mb4
character_set_filesystembinary
character_set_resultsutf8mb4
character_set_serverutf8mb4
character_set_systemutf8
collation_connectionutf8mb4_unicode_ci
collation_databaseutf8mb4_unicode_ci
collation_serverutf8mb4_unicode_ci

collation_connection 、collation_database 、collation_server是什么没关系。

但必须保证

系统变量描述
character_set_client(客户端来源数据使用的字符集)
character_set_connection(连接层字符集)
character_set_database(当前选中数据库的默认字符集)
character_set_results(查询结果字符集)
character_set_server(默认的内部操作字符集)

这几个变量必须是utf8mb4。

5. 数据库连接的配置

数据库连接参数中: 
characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 
而autoReconnect=true是必须加上的。

6. 将数据库和已经建好的表也转换成utf8mb4

更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci
如有必要,还可以更改列的编码