- 1 MySQL 简介
- MySQL 版本和产品线说明
- MySQL 安装
- 2 MySQL 基础教程
- 2.1 SQL 语法:SELECT/INSERT/UPDATE/DELETE
- 2.2 MySQL 列类型
- 2.3 使用用户变量
- 2.4 MySQL 的日期和时间管理
- 2.5 集合运算
- 3 MySQL 高级教程
- 3.1 触发器
- 3.2 视图
- 3.3 复制 Replication~主从库配置
- 3.4 分区存储
- 本章参考
- 4 MySQL 优化
- 4.1 优化数据库结构
- 4.2 优化 SQL 语句
- 4.3 优化索引
- 4.4 优化数据库服务器 mysql_serverd
- 4.5 修改配置文件 my.cnf/my.ini
- 5 MySQL 管理
- 5.1 MySQL 管理常用命令
- 5.2 MySQL 权限管理
- 5.3 MySQL 备份和恢复
- 5.4 MySQL 数据库安全
- 常见问题 FAQ
- 使用的常见问题
- MySQL 字符集乱码
- MySQL 存储二进制图片
- 参考资料
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.5 修改配置文件 my.cnf/my.ini
my.cnf(linux)
或者 my.ini(windows)
是 MySQL 数据库的配置文件,它存在多个地方,在/etc 目录,数据目录和用户主目录都有。放在不同位置,里面的选项有不同的作用范围,下面是 MySQL 读取配置文件的顺序和作用。
mysql 读取配置文件的顺序:
/etc/my.cnf
Global options.DATADIR/my.cnf
Server-specific options.defaults-extra-file
The file specified with the--defaults-extra-file
option.~/.my.cnf
User-specific options.
max_connections = 1000
# MySQL 的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多, 介于 MySQL 会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接 数量,以定夺该值的大小。
open_files_limit = 65535
# MySQL 打开的文件描述符限制,默认最小 1024;当 open_files_limit 没有被配置的时候,比较 max_connections5 和 ulimit -n 的值,哪个大用哪个,
# 当 open_file_limit 被配置的时候,比较 open_files_limit 和 max_connections5 的值,哪个大用哪个。
thread_concurrency = 8 #一般建议数量等于同 CPU 数量核数。
query_cache_size = 512M #重点优化参数(主库 增删改-MyISAM)
query_cache_limit = 2M #指定单个查询能够使用的缓冲区大小,缺省为 1M
key_buffer_size = 384M
# key_buffer_size 指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系 统将开始换页并且真的变慢了。对于内存在 4GB 左右的服务器该参数可设置为 384M 或 512M。通过检查状态值 Key_read_requests 和 Key_reads,可以知道 key_buffer_size 设置是否合理。比例 key_reads / key_read_requests 应该尽可能的低,至少是 1:100,1:1000 更好(上述状态值可以使用 SHOW STATUS LIKE ‘key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet = 32M
# 增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或 mysqld 必须返回大的结果行时 mysqld 才会分配更多内存。该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
table_cache = 512
# table_cache 指定表高速缓存的大小。每当 MySQL 访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的 状态值 Open_tables 和 Opened_tables,可以决定是否需要增加 table_cache 的值。如果你发现 open_tables 等于 table_cache,并且 opened_tables 在不断增长,那么你就需要增加 table_cache 的值了(上述状 态值可以使用 SHOW STATUS LIKE ‘Open%tables'获得)。注意,不能盲目地把 table_cache 设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能 不稳定或者连接失败。
提升性能的建议 :
- 如果 opened_tables 太大,应该把
my.cnf
中的 table_cache 变大 - 如果 Key_reads 太大,则应该把
my.cnf
中key_buffer_size
变大。可以用 Key_reads/Key_read_requests 计算出 cache 失败率 - 如果 Handler_read_rnd 太大,则你写的 SQL 语句里很多查询都是要扫描整个表,而没有发挥索引的键的作用
- 如果 Threads_created 太大,就要增加
my.cnf
中 thread_cache_size 的值。可以用 Threads_created/Connections 计算 cache 命中率 - 如果 Created_tmp_disk_tables 太大,就要增加
my.cnf
中 tmp_table_size 的值,用基于内存的临时表代替基于磁盘的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论