mysql 5.6升级到5.7
[mysqld]下配置explicit_defaults_for_timestamp=true,这是相对于5.6需要添加的一个配置,具体参考https://www.jianshu.com/p/d7d364745173
两个bat文件主要为了方便mysql的安装和卸载
不指定(注释)basedir和datadir,mysql默认初始化data在当前目录,方便后续mysql的打包安装。
4.接下来以管理员权限打开cmd, 执行mysqld –initialize,进行mysql初始化,生成data目录
5. 修改密码:
设置my.ini ,添加一行 skip-grant-tables,执行installdb.bat启动服务
进入mysql客户端:
mysql -uroot -P6706
use mysql
修改密码:
update user set authentication_string=password('hydee_pos_sys') where user='root';
把password_expired 改为不过期:
update user set password_expired='N' where user='root';
删除,skip-grant-tables,重启服务, 然后用用户名密码连接mysql,添加一个账户,给与最高权限
Mysql5.7瘦身 从1.7G到330M
删除文件夹中的lib 文件夹里的内容是给你重新编译MySQL软件使用的,一般使用不到。
运行时占用优化:table_definition_cache : 1400=>400
table_open_cache:2048=>256,调整后运行内存占用160M左右
Mysql配置优化
调试sql:
SELECT cg.cg_code
FROM ware_cg_base_info cg
INNER JOIN ware_cp_base_info cp
ON cg.ware_inside_code = cp.ware_inside_code
and cp.cg_code = cg.cg_code
LEFT JOIN t_ware_factory wf ON wf.factoryid = cg.factory_id
WHERE cg.cg_code = 100 and cp.cp_code = 10002;
my.ini配置:
innodb_buffer_pool_size : innodb表影响最大性能的参数,可以缓存数据块和索引键,适当增加这个参数,可以有效减少innodb表的磁盘I/O,因为InnoDB会把尽可能多的数据和索引缓存在缓冲区,这个类似与Oracle的Buffer Pool:如果只采用InnoDB,可以把这个参数调大一点,大约内存的70%左右。 根据实际剩余内存调整
innodb_thread_concurrency=9
innodb_thread_concurrency默认是0,则表示没有并发线程数限制,所有请求都会直接请求线程执行。注意:当 innodb_thread_concurrency 设置为0时,则innodb_thread_sleep_delay的设置将会被忽略,不起作用。如果数据库没出现性能问题时,使用默认值即可。
tmp_table_size=60M 默认为 16M
-内部(内存中)临时表的最大大小
-如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.
-此限制是针对单个表的,而不是总和.
innodb_log_buffer_size=5M 默认为8M 默认的设置在中等强度的写入负载及短事物处理时,性能还可以。但是存在大量更新操作或者负载较大时,就要慢慢增加这个参数的值了。不过不要设置太大,会浪费内存。它每秒都会刷新一次,所以不用设置超过1s所需的内存空间,16M足够了。
query_cache_size=0 默认1MB
-查询缓冲常被用来缓冲 SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.
-打开查询缓冲可以极大的提高服务器速度, 如果你有大量的相同的查询并且很少修改表.
-查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来说是否足够高.
-注意: 在你表经常变化的情况下或者如果你的查询原文每次都不同,
-查询缓冲也许引起性能下降而不是性能提升.
由于采用Innodb引擎,去掉myisam配置:
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=79M
key_buffer_size
优化前配置:查询耗时 mysql 5.6 查询耗时2s左右,占用400M左右
innodb_log_buffer_size=1M
innodb_thread_concurrency=9
key_buffer_size=8M
tmp_table_size=44M
read_buffer_size=4M
read_rnd_buffer_size=64k
sort_buffer_size=256k
thread_cache_size=10
query_cache_size=0
优化后配置: mysql 5.6 , 查询耗时2s左右 5.7查询耗时0.1-0.2s,占用160M左右
innodb_log_buffer_size=2M 默认为1M
innodb_thread_concurrency=8 你的服务器CPU有几个就设置为几,建议用默认一般为8
key_buffer_size=256M 默认为218 调到128最佳
tmp_table_size=64M 默认为16M 调到64-256最挂
read_buffer_size=4M 默认为64K
read_rnd_buffer_size=16M 默认为256K
sort_buffer_size=32M 默认为256K
thread_cache_size=120 默认为60
query_cache_size=0
总结:
1.经测试,mysql 5.7比之5.6在查询性能, 运行时占用,机器适配上有较好提升,在性能差的机器上,5.7比5.6有更好的性能
2.mysql优化除sql使用正确索引、分库分表外、读写分离等之外,根据服务器性能合理配置mysql参数也能发挥mysql更好性能
参考文档: