本文最后更新于 2024-01-26,文章内容可能已经过时。

基本的配置:

[mysqld]
user=mysql
basedir=/home/application/mysql/app
datadir=/home/application/mysql/data
character_set_server=utf8


port=3306
socket=/tmp/mysql.sock

#最大连接数
max_connections=1000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小
max_allowed_packet=150M

#超时时间,根据生产实际情况
通过jdbc连接数据库是非交互式连接
wait_timeout = 300

#通过mysql客户端连接数据库是交互式连接,根据生产实际情况
interactive_timeout = 500

#只能用IP地址检查客户端的登录,不用主机名,跳过域名解析
skip-name-resolve=1


#myql 5.7.2新增了参数 log_timestamps,用于控制error log、general log、slow log日志记录使用的时区,只影响写入文件的时区,不影响写入表中记录的时区。默认值是UTC,支持设置为SYSTEM使用系统的时区
#日志时间
log_timestamps=SYSTEM



#调试日志,配合脚本定期删除
general_log = 1
general_log_file = /home/application/mysql/data/logs/mysql_general.log


#慢日志查询日志
long_query_time=3
slow_query_log=ON
slow_query_log_file=/home/application/mysql/data/slow_query.log

#错误日志
log-error=/home/application/mysql/data/mysql-error.log





[mysql]
socket=/tmp/mysql.sock

mysql:主从相关配置:

  • 主库:
[mysqld]
user=mysql
basedir=/home/application/mysql/app
datadir=/home/application/mysql/data
character_set_server=utf8


#慢日志查询日志
long_query_time=3
slow_query_log=ON
slow_query_log_file= /home/application/mysql/data/logs/slow_query.log

#错误日志
log-error=/home/application/mysql/data/logs/mysqld.log

port=3306
socket=/tmp/mysql.sock

max_connections=1000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


#binlog配置
server_id=5
log-bin=mysql-bin
max_binlog_size = 100M
binlog_format=row
log_slave_updates
expire_logs_days=7


#只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve=1

[mysql]
socket=/tmp/mysql.sock
  • 从库:
[mysqld]

user=mysql
basedir=/home/application/mysql/app
datadir=/home/application/mysql/data
character_set_server=utf8

#主从
server_id=3
#从库,只写入主库来的数据,除此之外包含root用户都没有写权限,只有读
super-read-only


#慢日志查询日志
long_query_time=3
slow_query_log=ON
slow_query_log_file= /home/application/mysql/data/logs/slow_query.log

#错误日志
log-error=/home/application/mysql/data/logs/mysqld.log

port=3306
socket=/tmp/mysql.sock

max_connections=1000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve=1

[mysql]
socket=/tmp/mysql.sock

有些系统变量能在配置文件中配置,有些变量又不能,我们想知道哪些变量能,哪些变量不能,除了撸代码还有别的方法吗?

当然是有的,用这个命令就可以:

/path/mysqld --verbose --help | grep "xxx"

例如,查看 foreign_key_checks 是否能通过配置文件配置:

./mysqld --verbose --help | grep "foreign-key-checks"

执行命令没有任何输出,说明 foreign_key_checks 不能通过配置文件配置。

查看 autocommit 是否能通过配置文件配置:

./mysqld --verbose --help | grep "autocommit"

# 输出如下
--autocommit Set default value for autocommit (0 or 1)
            (Defaults to on; use --skip-autocommit to disable.)

输出结果中有 --autocommit balabala 说明 autocommit 能通过配置文件配置。gn-key-checks。