题目
- 写出 my.cnf 配置文件至少 50 个参数的含义、用途。
- 预习 MYSQL 读写分离、LNMP、Nginx 实战。
my.cnf 解析
# 客户端配置
[client]
# 连接端口
port = 3306
# socket 文件路径
socket = /tmp/mysql.sock
# 服务器配置
[mysqld]
# MYSQL 服务用户
# mysql 默认用户
user = mysql
# MYSQL 用户定义 id
# 全局唯一
server_id = 10
# MYSQL 监听端口
port = 3306
# socket 文件路径
socket = /tmp/mysql.sock
# 数据目录
datadir = /data/mysql/
# 是否兼容 4.0 版本密码格式
# 4.0 16 个 16 进制字符
# 4.0+ * + 40 个 16 进制字符
# 1 兼容
# 0 不兼容
old_passwords = 1
# 表名大小写是否敏感
# 更改值可能需要特殊处理历史表名
# 0 表名储存为指定格式 匹配时区分大小写
# 1 表名储存为小写格式 匹配时不区分大小写
# 2 表名储存为指定格式 匹配时不区分大小写
lower_case_table_names = 1
# 默认字符集
character-set-server = utf8
# 默认引擎
default-storage-engine = MYISAM
# 是否启用 bin-log 日志
# 用于主从架构记录增删改操作
# off 关闭
# on 开启 默认值
# 自定义名称 启用并使用自定义名称作为日志名称
log-bin = bin.log
# 错误日志
log-error = error.log
# 进程 pid 文件
pid-file = mysql.pid
# 慢查询记录阈值
# 单位秒
long_query_time = 2
# 是否启用慢查询日志
# on 启用
# off 不启用
slow_query_log
# 指定慢查询日志路径和文件名
slow_query_log_file = slow.log
# 单个 binlog 日志可使用的缓冲区最大值
# 超过指定值则启用临时磁盘文件
binlog_cache_size = 4M
# binlog 日志格式
binlog_format = mixed
# 单个事务可使用的 binlog 日志缓冲区最大值
# 超过指定值则事务会失败
max_binlog_cache_size = 16M
# 单个 binlog 日志最大值
# 超过指定值则生成新的 binlog 日志文件
max_binlog_size = 1G
# binlog 日志的保留时间
# 超过指定值则会被删除
expire_logs_days = 30
# 全文索引搜索最小分词长度
ft_min_word_len = 4
# 待应答连接转储数
# 连接数达到 max_connections 时 新连接会被转储在堆栈中
# 待应答连接数超过指定值将不会被赋予资源
# 每个连接占 256kb
# 总堆栈占用量 = back_log * 256kb
# 指定值不能超过系统 TCP/IP 连接侦听队列的大小
back_log = 512
# 服务器和客户端通讯的最大数据包大小
# 根据服务器带宽和业务需求综合取舍
max_allowed_packet = 64M
# MYSQL 客户端最大并发连接数
# 根据业务需求和服务器资源调整
# 性能相关重要参数
max_connections = 4096
# 允许协议握手错误数
# 仅用于通过验证的主机
# 超过指定值则会禁止该 IP 的所有请求
# 通常是网络延迟等情况导致握手失败
max_connect_errors = 100
# Join Buffer 的大小
# 针对非索引或二级索引关联查询有效
join_buffer_size = 2M
# 查询操作缓冲区大小
read_buffer_size = 2M
# 随机读缓冲区大小
# 用于储存排序查询结果行指针 获取值时因为是通过指针读取实际物理地址 所以很大概率是随机读取
# 应用于所有引擎
read_rnd_buffer_size = 2M
# 排序操作缓冲区大小
sort_buffer_size = 2M
# 查询结果集缓冲区大小
query_cache_size = 64M
# 所有线程可打开表的数量
# 具体数值根据业务量调整
table_open_cache = 10000
# 缓存可重用的线程数
# 用于节省资源开销
thread_cache_size = 256
# MEMORY 引擎表允许增长的最大大小
max_heap_table_size = 64M
# 临时表的内存缓存大小
tmp_table_size = 64M
# 连接线程被创建时分配的内存大小
thread_stack = 192K
# 程序最大并发线程数
# 一般取值为服务器逻辑 cpu 数量的两倍
# 性能相关重要参数
thread_concurrency = 24
# 是否允许客户端使用 LOAD DATA LOCAL INFILE命令导入存放于客户端的数据文件
local-infile = 0
# 是否限制普通用户使用 show-databases 命令
skip-show-database
# 禁用连接 DNS 解析
# 禁用可以加速连接响应速度
# 禁用后 MYSQL 无法获取连接的 hostname 在用户授权表中只能使用 IP 匹配
skip-name-resolve
# 跳过外部锁定
# 针对基于 MyISAM 引擎的表
# 适用于单服务器环境 可提高 MYSQL 性能
skip-external-locking
# 连接超时时间
# 单位为秒
# 超过指定值 MYSQL 会主动断开连接
connect_timeout = 600
# 针对交互式连接的服务器等待时间
# 超过指定时间服务器仍未收到来自客户端的数据则会主动断开连接
interactive_timeout = 600
# 锁等待超时时间
wait_timeout = 600
#*** MyISAM
# MyISAM 引擎索引缓冲区大小
# 关键参数 直接决定 MYSQL 性能
# 通常设置为物理内存的 3/4
# 可选项 根据业务需求先择
key_buffer_size = 512M
# MyISAM 表批量插入数据时创建的临时缓冲区的大小
bulk_insert_buffer_size = 64M
# MyISAM 表发生变化时重新排序所使用的缓冲区大小
# 可选项 可只使用针对全局的 sort_buffer_size
myisam_sort_buffer_size = 64M
# 创建 MyISAM 表索引时允许使用的临时文件大小
myisam_max_sort_file_size = 1G
# Repair by sorting 过程中是否并行创建 MyISAM 表索引
myisam_repair_threads = 1
# MyISAM 表并发插入
# 0 不允许并发插入
# 1 允许对没有空洞(即表中没有被删除的行)的表进行并发插入 新数据位于表末端
# 2 无论表是否有空洞 都进行并发插入 新数据位于表末端
# 系统默认值为 1
concurrent_insert = 2
# 允许的 GROUP_CONCAT() 函数结果的最大长度
myisam_recover
#*** INNODB
# InnoDB 引擎数据缓冲和索引内存池大小
# 关键参数 直接决定 MYSQL 性能
# 通常设置为物理内存的 3/4
# 可选项 根据业务需求先择
innodb_buffer_pool_size = 64G
# 设置 InnoDB 存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小
# 实例中的数据库对象非常多的时 需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的
innodb_additional_mem_pool_size = 32M
# InnoDB 数据文件初始大小
# autoextend 可自增
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
# InnoDB 读操作并发线程数
innodb_read_io_threads = 8
# InnoDB 写操作并发线程数
innodb_write_io_threads = 8
# 是否启用 InnoDB 独立表空间
# 1 启用
# 0 关闭
innodb_file_per_table = 1
# InnoDB 事务日志写入方式
# 0 事务日志大约一秒写入日志文件一次 并同步刷新到磁盘中
# 1 在每次提交后立即将事务日志写入到日志文件 并同步刷新到磁盘中
# 2 在每次提交后立即将事务日志写入到日志文件 大约一秒刷新一次
innodb_flush_log_at_trx_commit = 2
# InnoDB 锁等待超时时间
innodb_lock_wait_timeout = 120
# InnoDB 日志缓存大小
innodb_log_buffer_size = 8M
# InnodDB 日志文件大小
innodb_log_file_size = 256M
# 日志组中的文件总数
innodb_log_files_in_group = 3
# innodb 最大脏页的百分比
# 超过指定值 innodb 会刷新脏页
# 软限制 不被保证绝对执行
innodb_max_dirty_pages_pct = 90
# InnoDB 并发线程数
innodb_thread_concurrency = 16
# InnoDB 可打开的文件数
innodb_open_files = 10000
# Innodb 表空间损坏导致服务启动失败时的修复模式
# 值大于 0 时都允许对表进行 SELECT 操作 可以导出数据
# 1 忽略检查到的损坏页
# 2 阻止 master thread 和任何 purge thread 运行
# 3 不执行事务回滚操作
# 4 不执行插入缓冲的合并操作 可能永久损坏数据文件
# 5 将未提交的事务视为已提交
# 6 不执行回滚操作 可能引起树或者其他数据库结构更多的损坏
#innodb_force_recovery = 4
#*** Replication Slave
# 只读
# 读写分离从库配置项
read-only
# 启动 slave 时不启动 SQL 线程和 I/O 线程
#skip-slave-start
# 中继日志
relay-log = relay.log
# 开启级联同步
# 即将 slave I/O 线程读取到的数据同步写入自己的 binlog 中
log-slave-updates