解决连接Docker mysql容器慢的问题
问题描述:
创建一个内部网络(docker network create ims_network),在这个内部网络跑了两个容器(一个mysql容器,一个python容器),从python容器中向mysql容器中写数据(insert,update)很慢,select很快。
时间:10个insert用了2秒。
问题解决:
[mysqld]
skip-name-resolve
innodb_flush_log_at_trx_commit=0
sync_binlog=0
方法解析:
skip-name-resolve:跳过域名解析,对有些场景很管用,但对我遇到的不怎么管用。
设置这个以后,速度只有一点点提升(2秒 -> 1秒9)。
innodb_flush_log_at_trx_commit=0: 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。
设置这个以后,速度有很大提升(1秒9 -> 1秒)。
sync_binlog=0:每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。设为1是最安全的做法,但效率最低。docker中默认设置是1,意思是由操作系统来负责二进制日志文件的同步工作。
设置这个以后,速度有显著提升(1秒 -> 30毫秒)。
解决中文乱码的问题
编辑 my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8