目录
一、配置文件
二、MySQL参数
一、配置文件
配置文件目录:/etc
注意:首行缩进的均为示例,主要参数不能作为生产环境依据,建议在DBA指导下配置。更新中
[root@rabbitmq_1 etc]# vim my.cnf
//因为mysql在启动时候,会先读取my.cnf这个配置文件,把账号密码放进去,就不需要在输入,能直接登录。
[client] //表示所有客户端登录进去使用到的参数
user=root
password=xxxxxx
socket=/var/lib/mysql/mysql.sock //指定socket文件路径 进入mysql 使用 show variables like 'socket';查看
[mysql]://表示mysql登录进去之后的配置参数
prompt=(\\u@\\h) [\\d]>\\_
prompt=\\u@\\d \\R:\\m mysql>
(root@localhost) [(none)]> show databases;
(root@localhost) [(none)]> use mysql;
(root@localhost) [mysql]>
[mysqldump]
single-transaction = 1
master-data=1
[mysqld]://表示mysql服务器启动时候的参数
prot = 3306
log-bin=mysql-bin
expire_logs_days = 7 #mysql8.0以下版本binlog保存时效 以天为单位,默认0为永不过期
binlog_expire_logs_seconds #mysql8.0以上版本binlog保存时效 以秒为单位,默认的binlog过期时间为2592000秒,也就是30天
binlog_format = row #默认为mixed混合模式,更改成row复制,为了数据一致性
server_id =1
log_error = mysql.err //默认是机器名.err ,建议统一修改成mysql.err
sync_binlog=1
#这个参数控制二进制日志(binlog)的同步方式。设置为1意味着每次事务提交时,binlog都会被同步到磁盘,这有助于保证数据的完整性,但可能会降低性能。在高I/O压力的系统上,可以考虑将其设置为0或2,这样可能会提高性能,但牺牲了一定的数据完整性保障。
max_connections=2000 #允许的最大并发连接数。超过这个数的连接请求将会被拒绝。
max_connect_errors=100000 #在一定时间内,允许的最大连续连接错误次数。超过这个数后,服务器可能会拒绝新的连接请求,直到计数器重置。
datadir = /var/lib/mysql/
default_password_lifetime=0 //密码永不过期
bind_address = * //我当前的mysql 绑定在哪个IP地址上 默认是*,这样是不安全的,通常来说数据库是不允许外部用户访问的。建议绑定内网的IP,mysql只能绑定一个IP
sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#设置mysql导出路径
secure_file_priv=/tmp
replicate-do-db // 指定需要复制的数据库
replicate-do-db=db1,db2
replicate-ignore-db // 指定不需要复制的数据库。
replicate-ignore-db=db3
replicate-do-table // 指定需要进行同步的表。
replicate-do-table=db1.table1
replicate-do-table=db2.table2
replicate-ignore-table // 指定不需要进行同步的表。
replicate-ignore-table=db3.table3
# charset
character-set-server=utf8 //设置默认字符集
lower_case_table_names = 1 //表示表名大小写不敏感。如果你想保留表名的原始大小写,则将其值设置为 0。mysql8.0之后,lower_case_table_names 配置必须在安装好 MySQL 后,初始化 mysql 配置时才有效。一旦 mysql 启动后,再设置是无效的,而且启动报错。
max_binlog_cache_size=4G #二进制日志缓存的最大大小。这个缓存用于临时存储即将写入binlog文件的数据。如果缓存满了,数据会被写入binlog文件。设置合适的缓存大小可以平衡磁盘I/O和CPU的使用。
max_binlog_size=1G #单个二进制日志文件的大小限制。当达到这个大小后,MySQL会自动开始写入一个新的文件
tmp_table_size=96M 和 max_heap_table_size=96M #临时表的最大和默认大小。当一个查询需要一个临时表时,MySQL会使用内存来存储这个临时表。如果这个表的大小超过tmp_table_size,MySQL会使用磁盘存储这个临时表,这通常会降低性能。
#replication 主从都要配置
relay_log_recovery = 1 //IO 线程高可用 设置为 1,可以在从服务器启动时自动进行中继日志的恢复,以确保数据一致性。
relay_log_info_repository = table // SQL线程高可用 设置为 table,可以将中继日志信息保存到表中,以提高中继日志的持久性和可靠性。
slave_parallel_type=LOGICAL_CLOCK //指定并行复制的类型.可以设置为 NONE(不使用并行复制)、DATABASE(按数据库进行并行复制)或 LOGICAL_CLOCK(根据逻辑时钟进行并行复制)。其中,LOGICAL_CLOCK 是 MySQL 8.0 引入的新特性,可以更加精确地控制并行复制的顺序和速度,避免数据冲突和延迟。
slave_parallel_workers=4 --指定并行复制的工作线程数,可以根据系统资源和负载情况进行调整。通常情况下,建议将并行复制的工作线程数设置为 CPU 核心数的两倍或三倍,以达到最佳的性能和吞吐量。
//GTID 开启GTID需要依赖几个参数 需注意
gtid_mode = on //开启了 GTID 模式
log_slave_updates = 1 //设置为 1 ,当设置为主从复制中的从服务器时,这个参数确保从服务器上的更新会被记录到二进制日志中。这使得从服务器可以作为其他从服务器的源。
enforce_gtid_consistency = on //强制在所有事务提交时检查 GTID 一致性,确保所有操作都遵循 GTID 的规则,从而提高数据复制的一致性和可靠性。
replicate-wild-do-table // 使用通配符来指定需要进行同步的表。只有与通配符匹配的表的操作才会被复制到从服务器。
replicate-wild-do-table=db1.%
replicate-wild-do-table=db2.%
replicate-wild-ignore-table // 使用通配符来指定不需要进行同步的表。与通配符匹配的表的操作将不会被复制到从服务器。
replicate-wild-ignore-table=db3.%
// 增强半同步
plugin_dir=/usr/lib64/mysql/plugin
plugin-load="rpl_semi_sync_master:rpl_semi_sync_master.so;rpl_semi_sync_slave:rpl_semi_sync_slave.so"
rpl_semi_sync_master_enabled=1 //启用了半同步复制的主服务器端,它表示主服务器会等待至少一个从服务器确认已成功接收并写入了中继日志(relay log)中的事务数据,然后才认为事务提交成功。
rpl_semi_sync_slave_enabled=1 //启用了半同步复制的从服务器端,从服务器会在接收到事务数据后向主服务器发送确认信号。
rpl_semi_sync_master_timeout=100000 //设置了主服务器等待从服务器响应的超时时间,单位是毫秒。在超时之后,主服务器将继续正常的异步复制操作。
# session memory 设置会话级别的内存,默认 256K。详见三、mysql参数页
sort_buffer_size = 32M
tmp_table_size = 32M
#innodb
innodb_buffer_pool_size = 1024M #设置 InnoDB 缓冲池的大小,用于缓存数据和索引。建议将其设置为系统可用内存的 70-80%。例如,如果服务器有 8GB 内存,可以将其设置为 6GB。
innodb_buffer_pool_instances=8 #将InnoDB缓冲池分成多个实例。这有助于提高并发性能,尤其是在高并发的场景下。
innodb_log_buffer_size=16M #日志缓冲区的大小。用于暂存即将写入日志文件的数据。
innodb_log_file_size=1G #日志文件的大小。太大的日志文件可能导致恢复时间变长,而太小的日志文件可能导致文件数量过多。
innodb_log_files_in_group=2 #一个日志组中的日志文件数量。InnoDB使用多个日志文件来确保日志的持久性。
innodb_file_per_table=1 #为每个表使用单独的数据文件。这提供了更好的表空间管理,但会增加元数据文件的I/O负担。
innodb_flush_log_at_trx_commit=1 #在事务提交时刷新日志。设置为1确保数据安全性,但可能会降低性能。
innodb_flush_method=O_DIRECT #指定如何刷新数据和日志到磁盘。O_DIRECT可以减少操作系统缓存的使用,提高I/O效率。
innodb_data_file_path=ibdata1:268M;ibdata2:1024M:autoextend #数据文件的路径和大小。这里定义了两个数据文件,ibdata1和ibdata2,以及它们的大小和自动扩展的策略。
innodb_lock_wait_timeout = 10 # MySQL版本8.0,默认等待锁的时间为 50 秒,超过 50 秒,事务会自动回滚,此设置为10秒
bulk_insert_buffer_size=64M #批量插入操作使用的缓冲区大小。这可以加速大量数据的插入操作。
sort_buffer_size=16M #每个线程用于排序操作的缓冲区大小。当执行排序操作时,MySQL会使用这个缓冲区来存储临时数据。
join_buffer_size=16M #用于连接操作的缓冲区大小。当执行连接操作时,MySQL会使用这个缓冲区来存储临时数据。
plugin-load-add=validate_password.so #动态加载验证密码插件validate_password.so。这用于密码验证和密码策略检查。
validate-password=FORCE_PLUS_PERMANENT #设置密码验证插件的选项为FORCE_PLUS_PERMANENT,表示强制执行密码策略,并且密码过期策略为永久有效。
connection-control=FORCE #设置连接控制插件的选项为FORCE,表示强制执行连接控制规则。
connection-control-failed-login-attempts=FORCE #设置连接控制插件的选项,表示强制执行失败登录尝试的限制规则。如果达到限制次数,连接将被拒绝。
connection_control_failed_connections_threshold = 6 #设置失败连接尝试的阈值为6次,达到这个阈值后,连接将被拒绝一段时间。
connection_control_max_connection_delay = 86400 #设置最大的连接延迟时间为86400秒(24小时)。如果一个连接尝试被延迟,它将等待这么长时间才能建立连接。
//设置会话级别
transaction-isolation = READ-COMMITTED
----------------------
# slow log 记录慢查询 相关参数详见 五、mysql体系结构
slow_query_log = 1
slow_query_log_file = slow.log
long_query_time = 10 //设置慢查询的值,执行超过这个值的sql回被保存打慢查询日志中;
#min_examined_row_limit = 100 //扫描行数少于该值的sql不记录到慢查询日志
log_queries_not_using_indexes on //将没有使用索引的sql记录到慢查询日志
log_throttle_querles_not_using_indexes = 10 //限制每分钟记录没有使用索引sql语句的次数
log_output = FILE //慢查询日志的格式 file、table、none
//默认是 FILE 文件格式,也可以保存到表中,在mysql 这个库里边 slow_log
//就是说 将log_output 设置为table 的话,就会保存在slow_log这张表里。
set global log_output = table;
explicit_defaults_for_timestamp=true #当设置为true时,TIMESTAMP列将使用显式的默认值,而不是自动的当前时间戳。这有助于在某些场景下避免时间戳的不一致问题
open_files_limit=65535 #打开文件的最大数量限制。这包括表文件、日志文件等。超过这个限制可能会导致新的文件无法打开。
--------------------
//通用日志
general_log = 1 //开启通用日志记录
general_log_file = general.log //日志文件名
//多实例用到的标签
[mysqld1] 表示新部署一个mysql示例,
port = 3307
datadir = /mdata/data1
scoket = /tmp/mysqld.socket1
[mysqld-5.6] // 他表示这个标签下的参数,只会在启动mysql5.6版本时候才会读取,启动别的版本 这个参数不会生效,在特定版本中生效
innodb_flush_neighbors=2
//告诉mysql当前启动时候调用的程序是哪些关闭的程序是哪些、日志是哪些
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
log=/usr/local/mysql/mysqld_multi.log
二、MySQL参数
查看mysql参数配置文件,他是遵循替换原则
[root@rabbitmq_1 mysql]# mysql --help |grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
查看mysql所有参数
show variables;
1、查看error日志存放路径
(root@localhost) [performance_schema]> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | /var/log/mysqld.log |
+---------------+---------------------+
2、查看datadir目录
(root@localhost) [performance_schema]> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
3、查看当前慢查询的值,这个值就是执行的sql超过10就会被定义为慢查询,回被记录到慢查询日志中。
(root@localhost) [performance_schema]> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
4、设置当前回话的值,超过1.5秒的会被记录.
(root@localhost) [performance_schema]> set long_query_time = 1.5;
5、查看全局的值
(root@localhost) [performance_schema]> show global variables like 'long%query_time';
6、设置全局会话值,超过1.5秒的会被记录.
(root@localhost) [performance_schema]> set global long_query_time = 1.5
//默认是10秒,如果想要永久生效,可以在mysql 配置文件my.cnf中添加参数,然后重启mysql生效。
long_query_time =10
7、查询排序用到的内存,如果,在查询中,使用了order by来做排序,但是又没有合适的索引,可以调大这个内存,来提高查询速度。只针对当前会话级别
(root@localhost) [test]> show variables like 'sort_buffer_size';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| sort_buffer_size | 262144 | 256K大小
+------------------+--------+
--调整大小
(root@localhost) [test]> set sort_buffer_size = 256*1024*1024;
Query OK, 0 rows affected (0.00 sec)
--查看调整后的结果
(root@localhost) [test]> show variables like 'sort_buffer_size';
+------------------+-----------+
| Variable_name | Value |
+------------------+-----------+
| sort_buffer_size | 268435456 |
+------------------+-----------+
--查看全局 是不会变得
(root@localhost) [test]> show global variables like 'sort_buffer_size';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| sort_buffer_size | 262144 |
+------------------+--------+
8、查看当前会话排序的状态
(root@localhost) [test]> show status like 'sort%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Sort_merge_passes | 0 |
| Sort_range | 0 |
| Sort_rows | 24 |
| Sort_scan | 3 |
+-------------------+-------+
--清零
(root@localhost) [test]> flush status;
--查看全局的,当前服务器的整个的状态,如果Sort_merge_passe 非常大的话,就建议调大 sort_buffer_size参数
(root@localhost) [test]> show global status like 'sort%';
9、临时表参数 group by 分组时候会用到临时表。
(root@localhost) [test]> show variables like '%tmp%';
+---------------------------------+-----------+
| Variable_name | Value |
+---------------------------------+-----------+
| default_tmp_storage_engine | InnoDB |
| innodb_tmpdir | |
| internal_tmp_mem_storage_engine | TempTable |
| slave_load_tmpdir | /tmp |
| tmp_table_size | 16777216 |
| tmpdir | /tmp |
+---------------------------------+-----------+
有一个参数是 tmp_table_size 默认是16m,如果查询的数据量比较大,可以设置这个参数大一点。
(root@localhost) [test]> show status like '%tmp%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 7 |
| Created_tmp_tables | 6 |
+-------------------------+-------+
10、查看sql模式,建议把sql模式设计成5.7的模式。
(root@localhost) [test]> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
11、查看插件位置
(root@localhost) [(none)]> show variables like '%plugin%';
+-------------------------------+--------------------------+
| Variable_name | Value |
+-------------------------------+--------------------------+
| default_authentication_plugin | caching_sha2_password |
| plugin_dir | /usr/lib64/mysql/plugin/ |
+-------------------------------+--------------------------+
12、查看半同步相关信息
(root@localhost) [(none)]> show variables like 'rpl%';
13、查看半同步状态
(root@localhost) [(none)]> show status like 'rpl%';
显示当前正在运行的数据库连接和它们的相关信息
(root@localhost) [performance_schema]> show processlist;
+----+-----------------+-----------+--------------------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+--------------------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 3582 | Waiting on empty queue | NULL |
| 12 | root | localhost | performance_schema | Query | 0 | starting | show processlist |
+----+-----------------+-----------+--------------------+---------+------+------------------------+------------------+
查询我当前连接的ID
(root@localhost) [performance_schema]> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 12 |
+-----------------+
查询每一个会话的级别的变量的值是多少;
(root@localhost) [performance_schema]> select * from variables_by_thread where VARIABLE_NAME='long_query_time';
+-----------+-----------------+----------------+
| THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE |
+-----------+-----------------+----------------+
| 51 | long_query_time | 10.000000 |
+-----------+-----------------+----------------+
根据这个线程ID 查询出他的进程ID
(root@localhost) [performance_schema]> select * from threads where thread_id=51 limit 1 \G