以MySQL8版本配置项为例,配置文件的路径通常为[/etc/my.cnf]
配置分类说明
[client],用于配置本地客户端的连接信息
[mysqld],用于配置MySQL服务端的运行环境参数
[mysql]:用于配置mysql命令行客户端的选项。
[mysqldump]:用于配置mysqldump备份工具的选项。
[mysqladmin]:用于配置mysqladmin管理工具的选项。
[server]:用于配置MySQL服务器的全局选项。
[mysqld_safe]:用于配置启动和停止MySQL服务器的mysqld_safe脚本的选项。
[mysqlhotcopy]:用于配置mysqlhotcopy备份工具的选项。
[mysqld_multi]:用于配置管理多个MySQL实例的mysqld_multi工具的选项。
[mysqlbinlog]:用于配置mysqlbinlog二进制日志解析工具的选项。
配置文件示例
# 客户端配置
[client]
port = 3306 # 默认连接端口
socket = /var/lib/mysql/mysql.sock # 本地连接的 socket 套接字
default_character_set = utf8 # 设置字符集,通常使用 uft8 即可
user = xxx # 默认连接的用户名
password = xxx # 默认连接的密码
# 服务端配置
[mysqld]
port = 3306 # mysql服务运行端口
socket = /var/lib/mysql/mysql.sock # 客户端程序和服务器之间的本地通讯指定一个套接字文件
datadir = /var/lib/mysql # mysql数据存放路径
skip-external-locking # 用于多进程条件下为MyISAM数据表进行锁定,如果你有多台服务器使用同一个数据库目录(不建议),那么每台服务器都必须开启external locking
key_buffer_size = 16M # 用于索引块的缓冲区的大小。密钥缓冲区也称为密钥缓存
max_allowed_packet = 1024M # 数据包或生成的/中间的字符串的最大大小
table_open_cache = 64 # 表描述符缓存大小,可减少文件打开/关闭次数
sort_buffer_size = 512K # MySQL 执行排序时,使用的缓存大小。增大这个缓存,提高 group by,order by 的执行速度
net_buffer_length = 8K #
read_buffer_size = 256K # MySQL 读入缓存的大小。如果对表对顺序请求比较频繁对话,可通过增加该变量值以提高性能
read_rnd_buffer_size = 16M # MySql的随机读(查询操作)缓冲区大小
myisam_sort_buffer_size = 8M #MyISAM表发生变化,重建索引时所需的缓冲,此参数每个线程中分配,不宜设置过大
thread_cache_size = 8 # 可以重新利用保存在缓存中线程的数量
tmp_table_size = 16M # 临时数据表的最大长度,超过这个长度的临时数据表 MySQL 可根据需求自动将基于内存的 临时表改为基于硬盘的 MyISAM 表。我们可通过调整此项参数达到提高连接查询速度的效果
performance_schema_max_table_instances = 500 # 数据表最大内存占用空间
explicit_defaults_for_timestamp = true # 开启查询缓存
max_connections = 500 # 最大并发连接数,理论最大连接16384
default_authentication_plugin = mysql_native_password # MySQL默认连接身份验证方式
log-bin = mysql-bin # 启用二进制日志记录
binlog_format = mixed # [mixed | row | statement] 二进制日志记录格式
server-id = 1 # 服务编号,需要确保在集群中绝对唯一
default_storage_engine = InnoDB # 创建数据表时,默认使用的存储引擎
innodb_file_per_table = 1 # 独立表空间模式
innodb_buffer_pool_size = 512M # 缓存表和索引数据的 InnoDB 缓冲池的内存大小
innodb_log_file_size = 128M # 事务日志文件写操作缓存区的最大长度。更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_log_buffer_size = 64M # 事务日志文件写操作缓存区的最大长度。更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_flush_log_at_trx_commit = 1 # InnoDB事务同步方式
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
# 总结
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_lock_wait_timeout = 50 # 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久