Centos MySQL 优化 4gb ram

Centos MySQL 优化 4gb ram

我在 vps 上使用 Centos 6 64bit,内存为 4GB。1 个 wordpress 网站和 2 个壁纸脚本网站。Wordrpess 每天有 10k 次访问。网站很慢。

我的cnf

# 大型系统的示例 mysql 配置文件。
#
# 这是针对内存为 512M 的大型系统,系统主要运行
#MySQL。
#
# 你可以将此文件复制到
# /etc/my.cnf 设置全局选项,
# mysql-data-dir/my.cnf 设置服务器特定的选项(在此
# 安装此目录为 /usr/local/mysql/var) 或
# ~/.my.cnf 设置用户特定选项。
#
# 在此文件中可以使用程序支持的所有长选项。
# 如果你想知道程序支持哪些选项,请运行该程序
# 使用--help选项。

# 以下选项将传递给所有 MySQL 客户端
[客户]
#密码 = 你的密码
端口 = 3306
套接字 = /tmp/mysql.sock

# 以下是一些特定程序的条目

# MySQL 服务器
[mysqld]
端口 = 3306
套接字 = /tmp/mysql.sock
跳锁
设置变量 = key_buffer=256M
设置变量 = max_allowed_pa​​cket=1M
设置变量 = table_cache=256
设置变量 = sort_buffer=1M
设置变量 = record_buffer=1M
设置变量 = myisam_sort_buffer_size=64M
设置变量 = thread_cache=8
# 尝试使用 CPU 数量*2 来实现线程并发
设置变量 = thread_concurrency=8
日志箱
服务器 ID = 1

# 如果你使用 BDB 表,请取消注释以下内容
#设置变量 = bdb_cache_size=64M
#设置变量 = bdb_max_lock=100000

# 如果您使用 InnoDB 表,请取消注释以下内容
#innodb_data_home_dir = /usr/local/mysql/var/
#innodb_data_file_path = ibdata1:10M:自动扩展
#innodb_log_group_home_dir = /usr/local/mysql/var/
#innodb_log_arch_dir = /usr/local/mysql/var/
# 您可以将 .._buffer_pool_size 设置为 50 - 80%
但要注意不要将内存使用量设置得太高
#设置变量 = innodb_buffer_pool_size=256M
#设置变量 = innodb_additional_mem_pool_size=20M
# 将 .._log_file_size 设置为缓冲池大小的 25%
#设置变量 = innodb_log_file_size=64M
#设置变量 = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#设置变量 = innodb_lock_wait_timeout=50

# 将以下路径指向不同的专用磁盘
#tmpdir = /tmp/     
#log-update = /专用目录路径/主机名

[mysqldump]
快的
设置变量 = max_allowed_pa​​cket=16M

[mysql]
无自动重复
# 如果你不熟悉 SQL,请删除下一个注释字符
#安全更新

[isamchk]
设置变量 = key_buffer=128M
设置变量 = sort_buffer=128M
设置变量 = read_buffer=2M
设置变量 = write_buffer=2M

[myisamchk]
设置变量 = key_buffer=128M
设置变量 = sort_buffer=128M
设置变量 = read_buffer=2M
设置变量 = write_buffer=2M

[mysql热复制]
交互超时

这是./mysqltuner.pl

-------- 一般统计数据 --------------------------------------------------
[--] 跳过 MySQLTuner 脚本的版本检查
[OK] 当前正在运行支持的 MySQL 版本 5.5.27-log
[OK] 在 64 位架构上运行

-------- 存储引擎统计 ----------------------------------------------------------
[--] 状态:+存档-BDB-Federated+InnoDB-ISAM-NDBCluster
[--] MyISAM 表中的数据:16M(表:61)
[--] InnoDB 表中的数据:4M(表:34)
[--] PERFORMANCE_SCHEMA 表中的数据:0B(表:17)
[!!] 碎片表总数:34

-------- 安全建议 ----------------------------------------------------------
[确定] 所有数据库用户都已分配密码

-  -  -  -  性能指标  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -
[--] 上传时间:9 分 53 秒(40K q [68.862 qps],3K 连接,TX:203M,RX:4M)
[--] 读取/写入:83%/17%
[--] 总缓冲区:全局 432.0M + 每个线程 6.4M(最大线程数 151 个)
[确定] 最大可能的内存使用量:1.4G(已安装 RAM 的 36%)
[OK] 慢速查询:0% (0/40K)
[OK] 可用连接的最高使用率:74% (113/151)
[确定] 键缓冲区大小/总 MyISAM 索引:256.0M/10.1M
[OK] 密钥缓冲区命中率:97.9% (152K 缓存 / 3K 读取)
[OK] 查询缓存效率:62.0%(17K 缓存/27K 选择)
[确定] 每日查询缓存修剪次数:0
[OK] 需要临时表的排序:0% (0 个临时排序/224 个排序)
[确定] 磁盘上创建的临时表:25%(磁盘上 71 个/总共 277 个)
[OK] 线程缓存命中率:77% (831 个创建/3K 个连接)
[OK] 表缓存命中率:39% (135 打开 / 342 已打开)
[确定] 使用的打开文件限制:15% (162/1K)
[OK] 立即获取表锁:98% (13K 立即/13K 锁)
[确定] InnoDB 数据大小/缓冲池:4.5M/128.0M

-------- 建议 -----------------------------------------------------------------
一般建议:
    运行 OPTIMIZE TABLE 对表进行碎片整理,以获得更好的性能
    MySQL 在过去 24 小时内启动 - 建议可能不准确
    启用慢查询日志来排除错误查询故障

答案1

尝试增加 innodb_buffer_pool_size(至 512M)和查询缓存大小(query_cache_type=1 和 query_cache_size=256M)。

一些简单的、一般性的建议:http://www.ilsistemista.net/index.php/linux-a-unix/26-mysql-performance-tuning.html?limitstart=0

答案2

尝试为你的 WordPress 安装一个缓存插件。我个人推荐 W3 Super Cache:

http://wordpress.org/extend/plugins/wp-super-cache/

您还可以安装 XCache 并将 PHP 配置为 FCGI 以获得更好的缓存(WP Super Cache 可与 XCache 配合使用,也可独立使用)。

答案3

Percona 有一个相当不错的配置向导,它将输出一个与您的服务器和工作负载紧密相关的 my.cnf 文件:https://tools.percona.com/wizard

它不会给您提供完美的配置,但您可以与您当前运行的配置进行比较,看看他们为什么选择某些设置。

答案4

为什么认为 mysql 是瓶颈?我非常肯定 php 是问题所在,因为我管理着许多 magento 网站,每天的访问量超过 10k。

Wp 100% 兼容 php7,因此请从那里开始。首先在开发环境中执行,然后在实时环境中执行。缓存插件也是一个很好的提升,我建议使用 redis 缓存,简单快捷。下一步是将 mysql/mariadb 移至另一个 vm。由于您正在提升 my.cnf,因此您正在窃取 cpu/ram 到 php,因此 1 个 vm 用于 php,1 个 vm 用于 mysql 应该会很有帮助

相关内容