x. mysql.cnf

# 开启gtid
[mysqld]
server-id = 1                  # 每个服务器必须唯一,非0整数(主库和从库都需设置,不同值)
gtid_mode = ON                 # 启用 GTID 模式
enforce_gtid_consistency = ON  # 强制 GTID 一致性,防止执行不兼容的语句(如 CREATE TEMPORARY TABLE 在事务中)
log_bin = mysql-bin            # 启用二进制日志(主库必须,从库推荐启用以支持链式复制)

# 最大连接数
max_connections = 2000

# 表名忽略大小写
lower_case_table_names=1

# 字符编码格式
character_set_server = utf8mb4
collation_server = utf8mb4_bin

# 设置为 128M意味着允许更大的数据包传输。特别是在Navicat执行sql文件时候不容易报错
max_allowed_packet = 128M

# 定义 MySQL 如何处理无效或有问题的 SQL 语句,除非明确要求指定否则不配置
# sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

# 事务隔离级别
transaction_isolation = 'READ-COMMITTED'

# 解决函数创建时的复制错误,一般不开启,在创建函数的时候使用set global变量的方式所有节点开启,创建完毕后再关闭回来。
# log_bin_trust_function_creators = 1

# MySQL 服务器的默认认证插件,兼容性极好几乎所有旧客户端、驱动和工具都支持它。
default_authentication_plugin = mysql_native_password

# 防止空间持续增大,自动清理3天前的binlog(259200秒),可自行调整
binlog_expire_logs_seconds = 259200

x. 变量相关

# 临时修改(立即生效,但重启后失效)
SET GLOBAL max_connections = 2000;

# 临时禁用外键检查
SET GLOBAL FOREIGN_KEY_CHECKS = false;

# 解决函数创建时的复制错误
SET GLOBAL log_bin_trust_function_creators = 0;

# 设置binlog只保留3天(3*24*60*60 = 259200秒)
SET GLOBAL binlog_expire_logs_seconds = 259200;

x. 常用SQL

# 查询当前库所有表的数据量
SELECT table_name,table_rows FROM information_schema.tables WHERE table_schema = DATABASE() ORDER BY table_rows DESC;

# 查看所有用户连接的连接数
SELECT
  user,
  COUNT(*) AS connections
FROM information_schema.processlist
GROUP BY user
ORDER BY connections DESC;

# 交互式连接空闲超时(mysql 命令行)
SHOW VARIABLES LIKE 'interactive_timeout';

# 非交互式连接(应用/JDBC)的空闲超时时间 
SHOW VARIABLES LIKE 'wait_timeout';

# 列表用户
SELECT User, Host FROM mysql.user;