我在 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_packet=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_packet=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 应该会很有帮助