当前位置: 首页 > news >正文

MYSQL数据库的故障排除与优化

目录

一.MySQL单实例故障排查

故障现象1

故障现象 2 

 故障现象 3

故障现象 4

故障现象 5

故障现象 6

故障现象 7

故障现象 8

二.主从环境常见故障 

 1.故障一

2. 故障二

3. 故障三

三. 优化

1.SQL优化

2. 架构优化

3.硬件方面

1.1 关于CPU

1.2 关于内存

1.3 关于磁盘

4. 配置文件优化

关于引擎是 innodb 的优化如下: 

 关于引擎是 myisam 的优化如下


一.MySQL单实例故障排查

故障现象1

ERROR	2002	(HY000):	Can't	connect	to	local	MySQL	server	through	socket '/data/mysql/mysql.sock' (2)

问题分析:以上情况一般都是数据库未启动或者数据库端口被防火墙拦截导致。

解决方法:启动数据库或者防火墙开放数据库监听端口

故障现象 2 

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

问题分析:密码不正确或者没有权限访问。

解决方法: 修改 my.cnf 主配置文件,在[mysqld]下添加 skip-grant-tables,重启数据库。最后修改密码命令如下。

mysql>use mysql; 
mysql> update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; 
mysql> flush privileges;

再删除刚刚添加的 skip-grant-tables 参数,重启数据库,使用新密码即可登录。

重新授权,命令如下。

mysql>grant all on . to 'root'@'mysql-server' identified by '123456';

 故障现象 3

在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题。

问题分析:如果 MySQL 主机查询 DNS 很慢或是有很多客户端主机时会导致连接很慢. 由于开发机器是不能够连接外网的,在进行 MySQL 连接时,DNS 解析是不可能完成的, 从而也就明白了为什么连接那么慢了。

解决方法:修改 my.cnf 主配置文件,在[mysqld]下添加 skip-name-resolve,重启数据库可以解决。注意在以后授权里面不能再使用主机名授权。

故障现象 4

Can't open file: 'xxx_forums.MYI'. (errno: 145)

问题分析:

服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造 成了损坏。

可能是操作系统下直接将数据库文件拷贝移动,会因为文件的属组问题而产生这个 错误。

解决方法:

可以使用下面的两种方式修复数据表(第一种方法仅适合独立主机用户):

使用 MySQL 自带的专门用户数据表检查和修复工具 myisamchk。一般情况下只有在命令行下面才能运行 myisamchk 命令。常用的修复命令为:

myisamchk -r 数据文件目录/数据表名.MYI;

通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。 注意:以上两种修复方式在执行前一定要备份数据库。

修改文件的属组(仅适合独立主机用户):

复制数据库文件的过程中没有将数据库文件设置为 MySQL 运行的帐号可读写(一般适用于 Linux 和 FreeBSD 用户)。

故障现象 5

ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

问题分析:由于 mysql 数据库的参数:max_connect_errors,其默认值是 10。当大量(max_connect_errors)的主机去连接 MySQL,总连接请求超过了 10 次,新的连接就再也无法连接上 MySQL 服务。同一 个 ip 在短时间内产生太多中断的数据库连接而导致的阻塞( 超过 mysql 数据库 max_connection_errors 的最大值)。

解决方法: 使用 mysqladmin flush-hosts 命令清除缓存,命令执行方法如下:

mysqladmin -uroot -p -h 192.168.241.48 flush-hosts Enter password:

修改 mysql 配置文件,在[mysqld]下面添加 max_connect_errors=1000,然后重启 MySQL。 

故障现象 6

客户端报 Too many connections。

问题分析:连接数超出 Mysql 的最大连接数限制。

解决方法:

在 my.cnf 配置文件里面增大连接数,然后重启 MySQL 服务。

max_connections = 10000

临时修改最大连接数,重启后不生效。需要在 my.cnf 里面修改配置文件,下次重启生效。

set GLOBAL max_connections=10000;

故障现象 7

Warning: World-writable config file '/etc/my.cnf' is ignored ERROR! MySQL is running but PID file could not be found

问题分析:MySQL 的配置文件/etc/my.cnf 权限不对。

解决方法:

chmod 644 /et/my.cnf

故障现象 8

InnoDB: Error: page 14178 log sequence number 29455369832 InnoDB: is in the future! Current system log sequence number 29455369832

问题分析:innodb 数据文件损坏。

解决方法:修改 my.cnf 配置文件,在[mysqld]下添加 innodb_force_recovery=4, 启动数据库后备份数据文件,然后去掉该参数,利用备份文件恢复数据。

二.主从环境常见故障 

 1.故障一

  • 故障现象

从库的Slave_lO_Running为NO

The slave I/O thread stops because master and slave have equal MySQL serverids; 
these ids must be different for replication to work (or the --replicate-same-server-id
option must be used on slave but this does not always make sense;
please check the manual before using it).
  • 问题分析

主库和从库的server-id值一样

  • 解决方法
    • 修改从库的 server-id 的值,修改为和主库不一样
    • 重新启动数据库并再次同步

2. 故障二

  • 故障现象

从库的Slave_SQL_Running为NO

  • 问题分析

主键冲突或者主库删除或更新数据,从库内找不到记录,数据被修改导致

  • 解决方法

方法一 

mysql> stop slave;

mysqI> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> start slave;

方法二

set global read_only=true;

3. 故障三

  • 故障现象
Error initializing relay log position: I/O error reading the header from 
the binary log
  • 问题分析

从库的中继日志 relay-bin 损坏

  • 解决方法

手工修复,重新找到同步的 binlog 和 pos 点,然后重新同步即可

mysqI> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;

三. 优化

可以从不同角度进行优化:

  • SQL优化
  • MySQL架构优化
  • 硬件优化
  • MySQL配置文件优化

1.SQL优化

  • 尽量使用索引进行查询
  • 优化分页
  • GROUP BY优化

2. 架构优化

架构选择: 主从、主主、一主多从、多主多从

3.硬件方面

服务器硬件,最主要的无非 CPU、内存、磁盘三大关键因素

1.1 关于CPU

CPU 对于 MySQL 应用,推荐使用 S.M.P.架构的多路对称 CPU。

例如:可以使用两颗 Intel Xeon 3.6GHz 的 CPU。现在比较推荐用 4U 的服务器来专门做数据库服务器,不仅仅是针对于 MySQL。

1.2 关于内存

物理内存对于一台使用 MySQL 的 Database Server 来说,服务器内存建议不要小于2GB,推荐使用 4GB 以上的物理内存。不过内存对于现在的服务器而言,可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了 32G。

1.3 关于磁盘

磁盘寻道能力(磁盘 I/O)。以目前市场上普遍高转速 SAS 硬盘(15000 转/秒)为例, 这种硬盘理论上每秒寻道 15000 次,这是物理特性决定的,没有办法改变。 MySQL 每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以通常认为磁盘 I/O 是制约 MySQL 性能的最大因素之一,通常是使用 RAID-0+1 磁盘阵列,注意不要尝试使用RAID-5,MySQL 在 RAID-5 磁盘阵列上的效率并不高。如果不考虑硬件的投入成本,也可以考虑固态(SSD)硬盘专门作为数据库服务器使用。数据库的读写性能肯定会提高很多。

4. 配置文件优化

通常默认的 my.cnf 配置文件无法发挥出 MySQL 最高的性能,所以需要根据不同的硬件进行优化,配置文件的优化也是重点。下面是物理内存为 32G 的数据库优化参数,具体从全局、二进制日志、主从、innodb、myisam 几个方面优化

default-time-zone=+8:00#默认 MySQL 使用的是系统时区,修改为北京时间,也就是所说的东八区interactive_timeout = 120#服务器关闭交互式连接前等待活动的秒数wait_timeout = 120#服务器关闭非交互连接之前等待活动的秒数open_files_limit = 10240#MySQL 服务器打开文件句柄数限制group_concat_max_len = 102400#MySQL 默认的拼接最大长度为 1024 个字节,由于 1024 个字节会出现不够用的情况, 根据实际情况进行修改user=mysql#使用 mysql 用户运行character-set-server=utf8、init_connect='SET NAMES utf8'#设置字符集为 utf8back_log = 600#在 MySQL 暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中。
如果系统在短时间内有很多连接,则需要增大该参数的值,
该参数值指定到来的 TCP/IP 连接的监听队列的大小。默认值 50max_connections = 5000#MySQL 允许最大的进程连接数,如果经常出现 Too Many Connections 的错误提示, 则需要增大此值max_connect_errors = 6000#设置每个主机的连接请求异常中断的最大次数。当超过该次数,MySQL 服务器将禁止
host 的连接请求,
直到 MySQL 服务器重启或通过flush hosts 命令清空此host 的相关信息

table_cache = 1024

数据表调整缓冲区大小。它设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。因此,table_cache 的大小与 max_connections 的设置有关。例如,对于 200 个并行运行的连接,应该让表的缓存至少有 200×N。这里 N 是应用可以执行查询的一个连接中表的最大数量。
此外,还需要为临时表和文件保留一些额外的文件描述符。 当 MySQL 访问一个表时, 如果该表在缓存中已经被打开,则可以直接访问缓存。如果还没有被缓存,但是在 MySQL 表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区。如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。执行 flushtables 会清空缓存的内容。
一般来说,可以通过 showstatus 命令查看数据库运行峰值时间的状态值 Open_tables 和 Opened_tables,判断是否需要增加 table_cache 的值(其中 open_tables 是当前打开的表的数量,Opened_tables 则是已经打开的表的数量)。若 open_tables 接近 table_cache, 并且 Opened_tables 值在逐步增加, 那就要考虑增加这个值的大小了。还有就是Table_locks_waited 比较高的时候,也需要增加 table_cache

table_open_cache = 2048

指定表高速缓存的大小。每当 MySQL 访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容

max_heap_table_size = 256M

这个变量定义了用户可以创建的内存表 (memory table) 的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变,即 set @max_heap_table_size=#。但是对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)、修改(alter table)或者truncate table。服务重启也会设置已经存在的内存表为全局 max_heap_table_size 的值

external-locking = false

使用 skip-external-lockingMySQL 选项以避免外部锁定。该选项默认开启

max_allowed_packet = 32M

设置在网络传输中一次消息传输量的最大值。系统默认值为 1MB,最大值是 1GB,必须设置 1024 的倍数

sort_buffer_size = 512M

Sort_Buffer_Size 是一个 connection 级参数,在每个 connection(session)第一次需要使用这个 buffer 的时候,一次性分配设置的内存。Sort_Buffer_Size 并不是越大越好,由于是 connection 级的参数,过大的设置+高并发可能会耗尽系统内存资源

join_buffer_size = 8M

用于表间关联缓存的大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每个连接独享

thread_cache_size = 300

服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中;如果线程重新被请求,那么请求将从缓存中读取;如果缓存中是空的或者是新的请求,那么这个线程将被重新创建;如果有很多新的线程,增加这个值可以改善系统性能。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。设置规则如下:1GB 内存配置为 8,2GB 配置为 16, 3GB 配置为 32,4GB 或更高内存,可配置更大

thread_concurrency = 8

设置 thread_concurrency 值的正确与否,对 MySQL 的性能影响很大,在多个 CPU(或多核)的情况下, 错误设置了 thread_concurrency 的值, 会导致 MySQL 不能充分利用多CPU(或多核),出现同一时刻只能一个 CPU 在工作的情况。thread_concurrency 应设为CPU

核数的 2 倍。比如有一个双核的 CPU,那么 thread_concurrency 的应该为 4;2 个双核的
cpu,thread_concurrency 的值应为 8

query_cache_size = 512M

使用 MySQL 的用户,对于这个变量一定不会陌生。前几年的 MyISAM 引擎优化中, 这个参数也是一个重要的优化参数。但随着发展,这个参数也爆露出来一些问题。机器的内存越来越大,人们也都习惯性的把以前有用的参数分配的值越来越大。这个参数加大后也引发了一系列问题。首先分析一下 query_cache_size 的工作原理:一个 SELECT 查询在 DB 中工作后,DB 会把该语句缓存下来。当同样的一个 SQL 再次来到 DB 里调用时,DB 在该表没发生变化的情况下把结果从缓存中返回给 Client。这里有一个关建点,就是 DB 在利用Query_cache 工作时,要求该语句涉及的表在这段时间内没有发生变更。那如果该表在发生变更时,Query_cache 里的数据又怎么处理呢?首先要把 Query_cache 和该表相关的语句全部设置为失效,然后再写入更新。那么如果 Query_cache 非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是 Insert 就会很慢,这样看到的就是 Update 或是Insert 怎么这么慢了。所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。而且在高并发,写入量大的系统,建议把该功能禁掉

query_cache_limit = 4M

指定单个查询能够使用的缓冲区大小,缺省为 1M

query_cache_min_res_unit = 2k

默认是 4KB,设置值大对大数据查询有好处,但如果查询都是小数据查询,就容易造成内存碎片和浪费,查询缓存碎片率=Qcache_free_blocks/Qcache_total_blocks*100%。  如果查询缓存碎片率超过 20%,可以用 FLUSHQUERYCACHE 整理缓存碎片,或者尝试减小 query_cache_min_res_unit 。 如果查询都是小数据量, 那么查询缓存利用率
=(query_cache_size–Qcache_free_memory)/query_cache_size*100%。查询缓存利用率在 25%以下,说明 query_cache_size 设置的过大,可适当减小。查询缓存利用率在 80%以上而且 Qcache_lowmem_prunes>50 的话说明 query_cache_size 可能有点小,要不就是碎片太多。查询缓存命中率=(Qcache_hits–Qcache_inserts)/Qcache_hits*100%

default-storage-engine = innodb

默认引擎,现在一般都是 innodb 引擎表居多

thread_stack = 192K

设置 MySQL 每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为
128K 至 4GB,默认为 192KB

transaction_isolation = READ-COMMITTED

设定默认的事务隔离级别,READCOMMITTEE 是读已提交

tmp_table_size = 256M

tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL 产生一个Thetabletbl_nameisfull 形 式 的 错误 ; 如 果 执 行很 多 高 级 GROUPBY 查 询, 增 加tmp_table_size 值。如果超过该值,则会将临时表写入磁盘

key_buffer_size = 1024M

指定用于索引的缓冲区大小,增加它可以得到更好的索引处理性能

read_buffer_size = 2M

MySQL 读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL 会为它分配一段内存缓冲区。read_buffer_size 变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和 sort_buffer_size 一样,该参数对应的分配内存也是每个连接独享

read_rnd_buffer_size = 256M

MySQL 的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL 会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度。如果需要排序大量数据,可适当调高该值。但 MySQL 会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大

bulk_insert_buffer_size = 64M

批量插入数据缓存大小,可以有效提高插入效率,默认为 8M。(31)skip-name-resolve
禁止域名解析,包括主机名.所以授权的时候要使用 IP 地址

ft_min_word_len = 1

从 MySQL4.0 开始就支持全文索引功能,但是 MySQL 默认的最小索引长度是 4。如果是英文默认值是比较合理的,但是中文绝大部分词都是 2 个字符,这就导致小于 4 个字的词都不能被索引。MySQL 全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索效率高,能够支持百万级的数据检索。
下面几个参数时关于 MySQL 二进制日志文件的优化。

log-bin=mysql-bin

打开 MySQL 二进制功能

binlog_cache_size = 4M

在事务过程中容纳二进制日志 SQL 语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(—log-bin 选项)的前提下为每个客户端分配的内存。
注意:是每个 Client 都可以分配设置大小的 binlogcache 空间。可以通过 MySQL 的以下两个 状态变量来判 断当前的 binlog_cache_size 的状况 : Binlog_cache_use 和Binlog_cache_disk_use

max_binlog_cache_size = 128M

表 示 binlog 能 够使 用的 最大 cache 内 存大 小。 执行 多语 句事 务的 时候 , max_binlog_cache_size 如 果 不 够 大 的 话 , 系 统 可 能 会 报 出“Multi-statementtransactionrequiredmorethan'max_binlog_cache_size'bytesofstorage” 的错误

max_binlog_size = 1G

Binlog 日志最大值,一般来说设置为 512M 或者 1G,但不能超过 1G。该大小并不能非常严格控制 Binlog 大小,尤其是当到达 Binlog 比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有 SQL 都记录进入当前日志,直到该事务结束。这一点和Oracle 的Redo 日志有点不一样,因为Oracle 的 Redo 日志所记录的是数据文件的物理位置的变化,而且里面同时记录了 Redo 和 Undo 相关的信息,所以同一个事务是否在一个日志中对 Oracle 来说并不关键。而 MySQL 在Binlog 中所记录的是数据库逻辑变化信息,MySQL 称之为 Event,实际上就是带来数据库变化的 DML 之类的 Query 语句

sync_binlog=1

在 MySQL 中系统默认的设置是 sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统 Crash,在 binlog_cache 中的所有 binlog 信息都会被丢失。而当设置为“1”的时候最安全,但也是性能损耗最大的设置。因为当设置为 1 的时候,即使系统 Crash,也最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为 0 和设置为 1 的系统写入性能差距可能高达 5 倍甚至更多

binlog_format=mixed

默认使用 statement 模式,基于 SQL 语句的复制,另外一种是基于行的复制,为提升效率,可以将以上两种模式混合使用。一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的SQL 语句选择日志保存方式

expire_logs_days = 7

二进制日志只留存最近 7 天,不用人工手动删除

log-slave-updates

这条参数只读主从架构适用,当从库 log_slave_updates 参数没有开启时,从库的 binlog 不会记录来源于主库的操作记录。只有开启 log_slave_updates,从库 binlog 才会记录主库同步的操作日志

slow_query_log

打开慢查询日志

slow_query_log_file=slow.log

慢查询日志文件位置

long_query_time = 2

记录超过 2 秒的 SQL 查询

关于引擎是 innodb 的优化如下: 

innodb_additional_mem_pool_size = 64M

这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,类似于 Oracle 的 library cache。这不是一个强制参数,可以被突破

innodb_buffer_pool_size = 20480M 

用于缓存索引和数据的内存大小,这个选项的值越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写。当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。   然而内存还有操作系统或数据库其他进程使用,推荐设置 innodb-buffer-pool-size 为服务器总可用内存的 75%。 若设置不当, 内存使用可能浪费或者使用过多。 对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。buffer pool 的大小首先受 innodb_buffer_pool_instances 影响,当然影响较小

innodb_data_file_path = ibdata1:1024M:autoextend

用 来 指 定 innodb tablespace 文 件 , 如 果 我 们 不 在 my.cnf 文 件 中 指 定innodb_data_home_dir 和innodb_data_file_path 那么默认会在datadir 目录下创建ibdata1 作为 innodb tablespace

innodb_file_io_threads = 4

文件 IO 的线程数,一般为 4,但是在 Windows 下,可以设置得较大

innodb_thread_concurrency = 8

服务器有几个 CPU 就设置为几,建议用默认设置,一般为 8

innodb_write_io_threads = 8

InnoDB 使用后台线程处理数据页上写 I/O(输入输出)请求的数量。一般设置为 CPU
核数,比如 CPU 是 2 颗 8 核的,可以设置为 8

innodb_read_io_threads = 8

InnoDB 使用后台线程处理数据页上读 I/O(输入输出)请求的数量。一般设置为 CPU
核数,比如 CPU 是 2 颗 8 核的,可以设置为 8

innodb_flush_log_at_trx_commit = 2

如果将此参数设置为 1,将在每次提交事务后将日志写入磁盘。为提高性能,可以设置为 0 或 2,但要承担在发生故障时丢失数据的风险。设置为 0 表示事务日志写入日志文件,
而日志文件每秒刷新到磁盘一次。设置为 2 表示事务日志将在提交时写入日志,但日志文件每次刷新到磁盘一次

innodb_log_buffer_size = 16M

此参数确定日志文件所用的内存大小,以 M 为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL 开发人员建议设置为 1-8M 之间

innodb_log_file_size = 256M

此参数确定数据日志文件的大小,以 M 为单位,较大的值可以提高性能,但也会增加恢复故障数据库所需的时间

innodb_log_files_in_group = 3

为提高性能,MySQL 可以以循环方式将日志文件写到多个文件

innodb_file_per_table = 1

独享表空间(关闭)

innodb_max_dirty_pages_pct = 90

Buffer_Pool 中 Dirty_Page 所占的数量, 直接影响 InnoDB 的关闭时间。 参数innodb_max_dirty_pages_pct 可以直接控制了 Dirty_Page 在 Buffer_Pool 中所占的比率, 而且幸运的是 innodb_max_dirty_pages_pct 是可以动态改变的。所以,在关闭 InnoDB 之前先将 innodb_max_dirty_pages_pct 调小,强制数据块 Flush 一段时间,就能够大大缩短MySQL 关闭的时间

innodb_lock_wait_timeout = 120

InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合 InnoDB 使用 MyISAM 的 locktables 语句或第三方事务引擎,InnoDB 就无法识别死锁。为消除这种可能性,可以将 innodb_lock_wait_timeout 设置为一个整数值,设置 MySQL 在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数)

innodb_open_files = 8192 innodb

打开文件句柄数

 关于引擎是 myisam 的优化如下

myisam_sort_buffer_size = 128M

MyISAM 表发生变化时重新排序所需的缓冲大小

myisam_max_sort_file_size = 10G

MySQL 重建索引时所允许的最大临时文件的大小(当 REPAIR,ALTERTABLE 或者

LOADDATAINFILE)。如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)

myisam_repair_threads = 1

如果一个表拥有超过一个索引,MyISAM 可以通过并行排序使用超过一个线程去修复。这对于拥有多个 CPU 以及大量内存情况的用户是一个很好的选择

myisam_recover

自动检查和修复没有适当关闭的 MyISAM 表

相关文章:

MYSQL数据库的故障排除与优化

目录 一.MySQL单实例故障排查 故障现象1 故障现象 2 故障现象 3 故障现象 4 故障现象 5 故障现象 6 故障现象 7 故障现象 8 二.主从环境常见故障 1.故障一 2. 故障二 3. 故障三 三. 优化 1.SQL优化 2. 架构优化 3.硬件方面 1.1 关于CPU 1.2 关于内存 1.3 关…...

C++从入门到精通——入门知识

1. C关键字(C98) C总计63个关键字,C语言32个关键字 2. 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的就是对标识符的名…...

一些题目学习

1.打开文件添加helloworld public class Saier {public static void main(String[] args){String path"C:\\Users\\sjg\\Desktop\\abc.txt";String text"hello world";try {File file new File(path);FileWriter fileWriter new FileWriter(file,true);…...

Linux上管理文件系统

Linux上管理文件系统 机械硬盘 机械硬盘由多块盘片组成,它们都绕着主轴旋转。每块盘片上下方都有读写磁头悬浮在盘片上下方,它们与盘片的距离极小。在每次读写数据时盘片旋转,读写磁头被磁臂控制着不断的移动来读取其中的数据。 所有的盘片…...

【Linux】寿司线程池{单例模式之懒汉模式下的线程池}

文章目录 回顾单例模式0.多线程下的单例模式的意义1.什么是单例模式1.0设计模式1.1C单例模式的介绍及原理1.2拷贝构造和赋值重载的处理1.3if (nullptr ptr),nullptr放在比较运算符的前面?1.4实现单例模式的方式 2.实现懒汉方式的单例模式2.1单线程的单例模式2.2多…...

Docker资源管理和分配指南

什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组(如CPU、内存、磁盘输入输出等)。 什么是Docker资源限制?…...

为什么索引的底层结构是B+树

B树 1.数据库与数据交互的单位是page,而B树的每个节点都是一个page,访问一个节点,就相当于进行了一次I/O操作。所以访问的节点越少,查找效率越大。而B树是矮胖的,查找深度也不会太大。 2.B树中的节点是有序存储的,对于范围查询、排…...

NLP学习路线指南总结

当然可以,以下是一份较为详细的NLP学习路线指南,帮助你逐步掌握自然语言处理的核心技术和应用。 一、基础知识与技能 语言学基础: 语言学基本概念:语音、语法、语义等。语言的层次与分类:语音学、音系学、句法学、语…...

试过了,ChatGPT确实不用注册就可以使用了!

看到官网说不用登录也可以直接使用ChatGPT 我们来试一下 直接打开官网 默认是直接进入了chatgpt3.5的聊天界面 之前是默认进的登录页面 聊一下试试 直接回复了,目前属于未登录状态,挺好! 来试下ChatGPT4 跳转到了登录页面 目前来看gpt4还…...

CANoe自带的TCP/IP协议栈中TCP的keep alive机制是如何工作的

TCP keep alive机制我们已经讲过太多次,车内很多控制器的TCP keep alive机制相信很多开发和测试的人也配置或者测试过。我们今天想知道CANoe软件自带的TCP/IP协议栈中TCP keep alive机制是如何工作的。 首先大家需要知道TCP keep alive的参数有哪些?其实就三个参数:CP_KEEP…...

【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、哈希1.1 哈希概念1.2 哈希函数1.3 哈希冲突 二、闭散列2.1 数据类型2.2 成员变量2.3 默认成员函数2.…...

「PHP系列」If...Else语句/switch语句

文章目录 一、If...Else语句1. 基本语法2. 带有 elseif 的语法3. 示例示例 1:基本 if...else 结构示例 2:使用 elseif示例 3:嵌套 if...else 结构 4. 注意事项 二、switch语句1. 基本语法2. 示例示例 1:基本 switch 结构示例 2&am…...

Ubuntu部署BOA服务器

BOA服务器概述 BOA是一款非常小巧的Web服务器,源代码开放、性能优秀、支持CGI通用网关接口技术,特别适合用在嵌入式系统中。 BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通用网络对嵌入式设备进行监控,并将反馈信…...

安卓Glide加载失败时点击按钮重新加载图片

需求 假设此时已经用load指定一个url: String,又用into指定了一个img: ImageView开始加载,但是网络突然中断,导致图片加载失败。在这种情况下,想要通过点击一个Button重新加载。 Glide.with(context).load(url).placeholder(loa…...

linux下python服务定时(自)启动

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…...

awk命令进阶操作(二)

awk模块 awk模块awk的BEGIN模块和END模块BEGIN模块BEGIN 常见错误END模块END模块 常见错误 案例计算1~100的累加和统计系统中有多少用户的shell类型是/bin/bash awk模块 awk的BEGIN模块和END模块 格式 awk BEGIN{}{}END{} 文件名BEGIN模块 用于定义一个动作,用{…...

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位,可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​),方向是 D i D_i Di​ (上下左右之一, 用…...

高阶DS---AVL树详解(每步配图)

目录 前言: AVL树的概念: AVL树节点的定义: AVL树的插入(重点) AVL树的旋转: (1)新节点插入较高左子树的左侧---右单旋 (2)新节点插入较高右子树的右侧---左单旋 …...

c++前言

目录 1. 什么是 C 2. C 发展史 3. C 的重要性 4. 如何学习 C 5. 关于本门课程 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时, C 语言则不合适…...

2024年泰迪杯数据挖掘B题详细思路代码文章教程

目前b题已全部更新包含详细的代码模型和文章,本文也给出了结果展示和使用模型说明。 同时文章最下方包含详细的视频教学获取方式,手把手保姆级,模型高精度,结果有保障! 分析: 本题待解决问题 目标&#…...

练习 21 Web [GXYCTF2019]BabySQli

SQL联合查询,注意有源码看源码,Base64以及32的区别,MD5碰撞 打开后有登录框,先随意登录尝试 只有输入admin才是返回wrong pass! 其他返回wrong user 所以用户名字段一定要输入admin 养成好习惯,先查看源码…...

【并发编程】CountDownLatch

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器,…...

2024-HW --->SSRF

这不是马上准备就要护网了嘛,如火如荼的报名ing!!!那么小编就来查缺补漏一下以前的web漏洞,也顺便去收录一波poc!!!! 今天讲的主人公呢就是SSRF,以前学的时候…...

该主机与 Cloudera Manager Server 失去联系的时间过长。 该主机未与 Host Monitor 建立联系

该主机与 Cloudera Manager Server 失去联系的时间过长。 该主机未与 Host Monitor 建立联系 这个去集群主机cm界面上看会出现这个错误 排查思路: 一般比较常见的原因可能是出问题的主机和集群主节点的时间对应不上了。还有就是cm agent服务出现问题了 去该主机的…...

【BUG】No module named ‘dnf‘

报错内容: 类型一 # git clone https://github.com/pytorch/vision.git Cloning into vision... /usr/libexec/git-core/git-remote-https: symbol lookup error: /usr/lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_1_1_0类型二 # yum reins…...

Ubuntu pycharm配置Conda环境

参考博客:https://blog.csdn.net/qq_40726937/article/details/105323965 https://juejin.cn/post/7229543139950051388 Ubuntu20.04中搭建虚拟环境并且用pycharm调用Ubuntu中的虚拟环境。_ubuntu pycharm的虚拟环境选哪个-CSDN博客...

工作体验记录

文章目录 如何提高说话能力?如何提高行动力?如何完成一个任务产出成果?如何寻找突破点提高解决问题的效率?如何成为技术领导?参考资料 如何提高说话能力? 三思而后说,想清楚问题描述,抓住重点…...

YOLO火灾烟雾检测数据集:20000多张,yolo标注完整

YOLO火灾烟雾检测数据集:一共20859张图像,yolo标注完整,部分图像应用增强 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信...

基于Spring Boot的餐厅点餐系统

基于Spring Boot的餐厅点餐系统 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 部分系统展示 管理员登录界面 用户注册登录界面 …...

tkinter控件教程使用说明(三)

这篇tkinter控件使用教程是最后一 一、TreeView 属性/事件描述代码实例columns列名,用于设置树形视图的列tree["columns"] ("姓名", "年龄", "性别")column列的属性,包括列名、宽度等tree.column("姓名…...

上海普陀区企业网站建设/江苏网站seo营销模板

新建一个任务Module $ ng g m task 功能:项目列表显示,增加,修改,删除项目。邀请其它人员加入项目。 单一性原则:希望搭建多个组件,每个组件负责自己的功能。 一、task相关组件 $ ng g c task/task-home $…...

建设网站需要的人员及资金/网红营销

极限的计算方法 一、初等函数: 1.limCC(C是常值函数);2.若 fx≤M(即fx是有界量),limα0(即α是无穷小量),⇒limfx⋅α0, 特别:fxC⇒limC⋅α0 ;3.若 fx≤…...

团队网站模板/盐城seo排名

从MySQL binlog得到你要的SQL。根据不同设置,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL,带来的衍生功能 安装 $ git clone https://github.com/danfengcao/binlog2sql.git …...

天津电商网站建设/市场营销网络

在此示例中,您可以获取网页上所有出现的电子邮件地址。 如果您必须更改站点的特定页面或子部分的电子邮件地址,则很有用。 也可能对从网页上筛选爬网电子邮件地址有用,尽管这不是我在这里要实现的目标。 查看更多jQuery .each示例 。 i 不敏感…...

网站建设与管理相关工作岗位/seo基础入门

原文地址为: Python MySQLdb 学习总结任何应用都离不开数据,所以在学习python的时候,当然也要学习一个如何用python操作数据库了。MySQLdb就是python对mysql数据库操作的模块。官方Introduction : MySQLdb is an thread-compatible interface…...

有哪些做的比较好的网站/成都网站推广哪家专业

我正在使用php创建一个xml文件.生成的XML是.PeterVJohnMale但是如果值为null,则生成的xml是(查看节点插入).PeterJohnMale如果值为null,我希望创建xml以使其生成.PeterJohnMale这是我的代码.$doc new DOMDocument(1.0);$doc->formatOutput true;$root $doc->createEle…...