低配置服务器Mysql如何优化,1核1G内存云服务器内存占用过大参数优化

4,105次阅读
没有评论

共计 3218 个字符,预计需要花费 9 分钟才能阅读完成。

使用的是宝塔管理面板。

但是由于服务器使用的是 1 核 1G,

运行一段时间后发现服务器经常内存、CPU 占用特别高导致服务器宕机

(也不知道是不是有人在 ddos 攻击我的服务器,反正有很多尝试访问不存在的 url 请求,估计是在探测扫描可能存在的后面地址)。

就 1 核 CPU+1G 内存来说但凡是个有心人要搞你,基本上网站很难防的住,但是有时候如果数据库查询过慢又没有进行一些其他缓存加速类的优化,在同时访问人数较多的情况下网站响应会很慢!昨天趁着有空在网上找了些 1G 内存 mysql 参数调优的文章,最终修改了 mysql 的一些参数,感觉内存及 cpu 占用还是有所下降。

文章来源地址 https://www.toymoban.com/diary/apps/222.html

先记录,后整理

修改了这两个配置参数 interactive_timeout=120 和 wait_timeout =120

[client]
#password  = your_password
port    = 3306
socket    = /tmp/mysql.sock

[mysqld]
binlog_cache_size = 32K
thread_stack = 256K
join_buffer_size = 256K
query_cache_type = 1
max_heap_table_size = 64M
port    = 3306
socket    = /tmp/mysql.sock
datadir = /www/server/data
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 100G
table_open_cache = 256
sort_buffer_size = 1024K
net_buffer_length = 4K
read_buffer_size = 1024K
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 4M
thread_cache_size = 32
query_cache_size = 32M
interactive_timeout=120
tmp_table_size = 64M
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 120
max_connect_errors = 100
open_files_limit = 65535
wait_timeout =120

log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/www/server/data/mysql-slow.log


long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""


innodb_data_home_dir = /www/server/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /www/server/data
innodb_buffer_pool_size = 64M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 1
innodb_write_io_threads = 1

[mysqldump]
quick
max_allowed_packet = 500M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

interactive_timeout: MySQL服务器 关闭交互式连接前等待的秒数。交互式客户端定义为在 mysql_real_connect()中使用 CLIENT_INTERACTIVE 选项的客户端。参数默认值:28800 秒(8 小时)
wait_timeout:          MySQL 服务器关闭非交互连接之前等待的秒数。在会话启动时,根据全局 wait_timeout 值或
全局 interactive_timeout 值初始化会话 wait_timeout 值 ,取决于客户端类型 – 由 mysql_real_connect() 的连接选项 CLIENT_INTERACTIVE 定义。参数默认值:28800 秒(8 小时)

   网上能搜到很多关于 mysql 中的 wait_timeout 相关的文章,但是大多数只是说明了他的作用,而且都说这个参数要配合那个 interactive_timeout 参数一起修改才会生效,经过今天我和同事的努力,这里要说一下,其实是我把同事坑了,很惭愧,之前只是看服务器上连接 mysql 的连接很多都是 timewait 状态,逐在网上搜索到这个 wait_timeout 参数,使用该参数后,果然很有效,大大抑制了很多无效的 timewait,但是谁知道这个参数会影响后端程序的连接,至于原因,后面会说。

 

      为什么会说网上大多数都是坑呢?因为这个 wait_timeout 并不是改了配置文件不起作用,也不是非要和那个 interactive_timeout 一起改,才会生效,只是你在配置文件中配置“wait_timeout = 10”,在 mysql 里,用 show variables like “%timeout%” 看到的还是 28800

这个 wait_timeout 的作用是,设置非交互连接(就是指那些连接池方式、非客户端方式连接的)的超时时间,默认是 28800,就是 8 小时,超过这个时间,mysql 服务器会主动切断那些已经连接的,但是状态是 sleep 的连接。

      而我们后端程序是运行在 windows 下的,所以安装的 myodbc,并使用 ado 方式连接的,也就是连接池方式,这种方式的坏处是,当服务器端去连接 mysql 的时候,连接池里的连接已经被 mysql 主动断开,这时取回的连接就是 null,再加上程序里对此没有做判断的话,接下来的对数据库的一系列的操作都会出现问题。

反正就是很坑,唉,说多了都是泪。

到此这篇关于低配置服务器 Mysql 如何优化,1 核 1G 内存云服务器内存占用过大参数优化的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/apps/222.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计3218字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)