Resumen y optimización de fallas comunes en Mysql !!

Puntos de conocimiento previo del caso

Para aprender a optimizar, primero debe tener un conocimiento profundo de la arquitectura lógica de MySQL. La Figura 8.1 es el diagrama de arquitectura lógica de MySQL, que nos permite comprender el principio operativo de MySQL con mayor claridad.
Inserte la descripción de la imagen aquí
La capa superior son algunos servicios de cliente y conexión, incluida la comunicación local sock y la mayoría de las comunicaciones TCP / IP basadas en herramientas cliente / servidor. Principalmente complete algunos procesos de conexión, autenticación de autorización y esquemas de seguridad relacionados. En esta capa, se introduce el concepto de grupo de subprocesos para proporcionar subprocesos a los clientes que acceden mediante autenticación de seguridad. El enlace seguro basado en SSL también se puede realizar en esta capa. El servidor también verificará la autoridad de operación que tiene para cada cliente que acceda de forma segura

La arquitectura de la segunda capa completa principalmente la mayoría de las funciones básicas del servicio, como la interfaz SQL, la consulta de caché, el análisis y la optimización de SQL y la ejecución de algunas funciones integradas. Todas las funciones del motor de almacenamiento cruzado también se implementan en esta capa, como los procedimientos y las funciones. En esta capa, el servidor analizará la consulta y creará el árbol de análisis interno correspondiente, y completará la optimización correspondiente, como determinar el orden de la tabla de consultas, si utilizar el índice, etc., y finalmente generar la operación de ejecución correspondiente. Si es una declaración de selección, el servidor también consultará la caché interna. Si el espacio de la caché es lo suficientemente grande, el rendimiento del sistema se puede mejorar en un entorno donde se resuelven una gran cantidad de operaciones de lectura.

En la capa del motor de almacenamiento, el motor de almacenamiento es realmente responsable del almacenamiento y la extracción de datos en MySQL, y el servidor se comunica con el motor de almacenamiento a través de API. Los diferentes motores de almacenamiento tienen diferentes funciones y se pueden seleccionar de acuerdo con sus necesidades reales

La capa de almacenamiento de datos es principalmente para almacenar datos en el sistema de archivos que se ejecuta en el dispositivo básico y completar la interacción con el motor de almacenamiento.

Solución de problemas de instancia única de MySQL

(1) Fenómeno de falla

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

Análisis de problemas: la situación anterior generalmente se debe a que la base de datos no se inicia o el puerto de la base de datos está bloqueado por el firewall. Solución: inicie la base de datos o abra el puerto de escucha de la base de datos en el firewall

(2) Fenómeno de falla

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

Análisis de problemas: la contraseña es incorrecta o no hay permiso para acceder. Solución: 1 Modifique el archivo de configuración principal de my.cnf, agregue skip-grant-tables en [mysqld] y reinicie la base de datos. El último comando de modificación de contraseña es el siguiente

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

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

(3) Síntomas
Cuando se utiliza una conexión remota a la base de datos, ocasionalmente puede ocurrir el problema de una conexión remota lenta a la base de datos.

Análisis de problemas: si el host MySQL tarda en consultar el DNS o si hay muchos hosts cliente, la conexión será lenta. Dado que la máquina de desarrollo no puede conectarse a la red externa, es imposible completar la resolución DNS cuando se conecta a MySQL. También entiendo por qué la conexión es tan lenta.

Solución: modifique el archivo de configuración principal my.cnf, agregue skip-name-resolve en [mysqld] y reinicie la base de datos para resolverlo. Tenga en cuenta que la autorización de nombre de host no se puede utilizar en autorizaciones futuras

(4) Fenómeno de falla

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

Análisis de problemas: el
servidor se apaga de forma anormal, el espacio donde se encuentra la base de datos está lleno o alguna otra razón desconocida causa daños en la tabla de la base de datos.
Puede ser que si el archivo de la base de datos se copia y se mueve directamente bajo el sistema operativo, este error ocurrirá debido a la agrupación del archivo.

Solución: Los dos métodos de reparación siguientes deben realizar una copia de seguridad de la base de datos antes de la ejecución. Los dos métodos siguientes
se pueden utilizar para reparar la tabla de datos (el primer método solo es adecuado para usuarios de host independientes):

1. Utilice myisamchk, la herramienta especial de reparación y verificación de tablas de datos de usuario de MySQL. Generalmente, el comando myisamchk solo se puede ejecutar bajo la línea de comando. Los comandos de reparación más utilizados son:
myisamchk -r directorio de archivos de datos / nombre de tabla de datos.MYI;

A través de la reparación de phpMyAdmin, phpMyAdmin tiene la función de reparar la tabla de datos. Después de ingresar a una tabla, haga clic en "Operación" y haga clic en "Reparar tabla" en el "Mantenimiento de la tabla" a continuación.

2. Modificar el grupo de archivos (solo apto para usuarios de host independientes): durante
el proceso de copia del archivo de la base de datos, el archivo de la base de datos no está configurado para que la cuenta en ejecución de MySQL pueda leerlo y escribirlo (generalmente aplicable a los usuarios de Linux y FreeBSD)

(5) 故障 现象
ERROR 1129 (HY000): El host 'xxx.xxx.xxx.xxx' está bloqueado debido a muchos errores de conexión; desbloquear con 'mysqladmin flush-hosts

Análisis de problemas: debido al parámetro de la base de datos mysql: max_connect_errors, su valor predeterminado es 10. Cuando una gran cantidad de (max_connect_errors) hosts se conectan a MySQL, y la solicitud de conexión total excede 10 veces, la nueva conexión ya no puede conectarse al servicio MySQL. Bloqueo causado por demasiadas conexiones de base de datos interrumpidas en un corto período de tiempo con la misma ip (excediendo el valor máximo de max_connection_errors de la base de datos mysql)

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

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

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

(6) Fenómeno de falla El
cliente informa Demasiadas conexiones.
Análisis de problemas: el número de conexiones supera el límite de número máximo de conexiones de Mysql.

#解决方法:
1.在 my.cnf 配置文件里面增大连接数,然后重启 MySQL 服务
max_connections = 10000

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

(7) Fenómeno de falla

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

Análisis de problemas: el archivo de configuración de MySQL /etc/my.cnf tiene permisos incorrectos.

#解决方法:
chmod 644 /et/my.cnf

(8) Fenómeno de falla

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

Análisis de problemas: el archivo de datos Innodb está dañado

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

Solución de problemas de maestro-esclavo de MySQL

(1) Fenómeno de falla
Slave_IO_Running de la biblioteca esclava NO

Análisis de problemas: el valor de ID de servidor de la biblioteca principal y la biblioteca esclava son los mismos.

Solución: modifique el valor de ID de servidor de la biblioteca esclava para que sea diferente de la biblioteca principal. Reiniciar después de la modificación y sincronizar nuevamente

(2) Síntoma 2
Slave_IO_Running de la biblioteca esclava NO

Análisis de problemas: Hay muchas razones para que el hilo de la biblioteca esclava sea NO. La razón principal es que la clave principal entra en conflicto o la base de datos maestra elimina o actualiza datos. La base de datos esclava no puede encontrar el registro y los datos se modifican. Por lo general, el error del código de estado es 1007, 1032, 1062, 1452, etc.

#解决方法一:
mysql> stop slave; 
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
mysql> start slave;

解决方法二:
设置用户权限,设置从库只读权限
set global read_only=true;

(3) Fenómeno de falla

Error initializing relay log position: I/O error reading the header from the binary log

Analice el problema: el contenedor de relés de la biblioteca esclava está dañado

#解决方法:
手工修复,重新找到同步的 binlog 和 pos 点,然后重新同步即可

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

Optimización de MySQL

Hardware

Cuando se trata de hardware de servidor, los factores más importantes son la CPU, la memoria y el disco.

(1) Acerca de la CPU
CPU Para aplicaciones MySQL, se recomienda utilizar CPU simétrica multicanal de arquitectura SMP. Por ejemplo: se pueden usar dos
CPU Intel Xeon 3.6GHz. Ahora se recomienda utilizar un servidor 4U como servidor de base de datos dedicado, no solo
para MySQL

(2) Acerca de la memoria Memoria
física Para un servidor de base de datos que utiliza MySQL, se recomienda que la memoria del servidor no sea inferior a
2 GB y se recomienda una memoria física superior a 4 GB. Sin embargo, la memoria es un
problema insignificante para los servidores actuales.Cuando encuentro servidores de gama alta en el trabajo, la memoria básicamente supera los 32G.

(3) Acerca de la
capacidad de búsqueda de disco (E / S de disco). Tomemos como ejemplo el disco duro SAS de alta velocidad (15000 rpm) que se encuentra actualmente en el mercado,
este tipo de disco duro busca en teoría 15000 veces por segundo, lo que viene determinado por las características físicas y no se puede modificar. MySQL
realiza una gran cantidad de operaciones de consulta complejas cada segundo , y se puede imaginar la cantidad de lecturas y escrituras en el disco. Por lo tanto, generalmente se considera que la E / S de disco es
uno de los factores más importantes que restringen el rendimiento de MySQL. Generalmente se utilizan matrices de discos RAID-0 + 1. Tenga cuidado de no intentar usar
RAID-5. MySQL no es eficiente en matrices de discos RAID-5. . Si no considera el costo de inversión del hardware, también puede
considerar los discos duros de estado sólido (SSD) que se utilizan específicamente como servidores de bases de datos. El rendimiento de lectura y escritura de la base de datos definitivamente mejorará mucho

Archivo de configuración de MySQL

Por lo general, el archivo de configuración my.cnf predeterminado no puede reproducir el rendimiento más alto de MySQL, por lo que debe optimizarse según el hardware diferente, y la optimización del archivo de configuración también es el foco. Los siguientes son los parámetros de optimización de la base de datos con una memoria física de 32G, que están optimizados en términos de registro binario global, maestro-esclavo, innodb y myisam, solo como referencia.

(1) zona horaria predeterminada = + 8:00
El MySQL predeterminado usa la zona horaria del sistema, modificada a la hora de Beijing, que es el llamado distrito de Dongba.
(2) tiempo_espera_interactivo = 120
La cantidad de segundos que el servidor espera la actividad antes de cerrar una conexión interactiva.
(3) tiempo_espera_espera = 120
La cantidad de segundos que el servidor espera la actividad antes de cerrar una conexión no interactiva.
(4) límite_de_archivos_abiertos = 10240
El servidor MySQL tiene un límite en el número de identificadores de archivos abiertos.
(5) group_concat_max_len = 102400
La longitud máxima de empalme predeterminada de MySQL es de 1024 bytes, ya que 1024 bytes serán insuficientes, modifíquelo de acuerdo con la situación real
(6) usuario = mysql
Ejecutar como usuario de mysql.
(7) servidor-conjunto-de-caracteres = utf8 、 init_connect = 'SET NAMES utf8'
Establezca el juego de caracteres en utf8
(8) back_log = 600
Cuántas solicitudes en un corto período de tiempo se pueden almacenar en la pila antes de que MySQL deje de responder temporalmente a nuevas solicitudes. Si el sistema tiene muchas conexiones en un período corto de tiempo, debe aumentar el valor de este parámetro, que especifica el tamaño de la cola de escucha para las conexiones TCP / IP entrantes. Valor predeterminado 50
(9) max_conexiones = 5000
MySQL permite el número máximo de conexiones de proceso. Si el mensaje de error Too Many Connections aparece con frecuencia, debe aumentar este valor.
(10) max_connect_errors = 6000
Establezca el número máximo de interrupciones anormales de la solicitud de conexión de cada host. Cuando se excede este número de veces, el servidor MySQL prohibirá la solicitud de conexión del host hasta que se reinicie el servidor MySQL o la información relacionada con el host se borre mediante el comando flush hosts
(12) table_open_caché = 2048
Especifique el tamaño de la caché de la tabla. Siempre que MySQL accede a una tabla, si hay espacio en el búfer de la tabla, la tabla se abre y se coloca en ella, de modo que se pueda acceder más rápido al contenido de la tabla.
(13) tamaño_de_tabla_heap_máx = 256M
Esta variable define el tamaño de la tabla de memoria (tabla de memoria) que los usuarios pueden crear. Este valor se utiliza para calcular el valor máximo de fila de la tabla de memoria. Esta variable admite cambios dinámicos, a saber, set @ max_heap_table_size = #.
Pero no hay uso para la tabla de memoria existente, a menos que la tabla se vuelva a crear (crear tabla), modificar (alterar tabla) o truncar tabla. El reinicio del servicio también establecerá la tabla de memoria existente en el valor global max_heap_table_size
(14) bloqueo externo = falso
Utilice la opción de MySQL de bloqueo externo de omisión para evitar el bloqueo externo. Esta opción está activada de forma predeterminada
(15) max_allowed_packet = 32M
设置在网络传输中一次消息传输量的最大值。系统默认值为 1MB,最大值是 1GB,必 须设置 1024 的倍数
(16)sort_buffer_size = 512M
Sort_Buffer_Size 是一个 connection 级参数,在每个 connection(session)第一次需 要使用这个 buffer 的时候,一次性分配设置的内存。Sort_Buffer_Size 并不是越大越好,由 于是 connection 级的参数,过大的设置+高并发可能会耗尽系统内存资源。
(17)join_buffer_size = 8M
用于表间关联缓存的大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每个 连接独享
(18)default-storage-engine = innodb
默认引擎,现在一般都是 innodb 引擎表居多
(20)thread_stack = 192K
设置 MySQL 每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为 128K 至 4GB,默认为 192KB
(21)transaction_isolation = READ-COMMITTED
设定默认的事务隔离级别,READCOMMITTEE 是读已提交。
(22)key_buffer_size = 1024M
指定用于索引的缓冲区大小,增加它可以得到更好的索引处理性能。
(23)bulk_insert_buffer_size = 64M
批量插入数据缓存大小,可以有效提高插入效率,默认为 8M
(24)skip-name-resolve
禁止域名解析,包括主机名.所以授权的时候要使用 IP 地址。

关于 MySQL 二进制日志文件

(1)log-bin=mysql-bin
打开 MySQL 二进制功能。
(2)expire_logs_days = 7
二进制日志只留存最近 7 天,不用人工手动删除
(3)slow_query_log
打开慢查询日志
(4)slow_query_log_file=slow.log
慢查询日志文件位置
(5)long_query_time = 2
记录超过 2 秒的 SQL 查询

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

(1)innodb_additional_mem_pool_size = 64M
这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,类 似于 Oracle 的 library cache。这不是一个强制参数,可以被突破
(2)innodb_file_io_threads = 4
文件 IO 的线程数,一般为 4,但是在 Windows 下,可以设置得较大
(3)innodb_thread_concurrency = 8
服务器有几个 CPU 就设置为几,建议用默认设置,一般为 8
(4)innodb_write_io_threads = 8
InnoDB 使用后台线程处理数据页上写 I/O(输入输出)请求的数量。一般设置为 CPU 核数,比如 CPU 是 2 颗 8 核的,可以设置为 8
(5)innodb_log_files_in_group = 3
#为提高性能,MySQL 可以以循环方式将日志文件写到多个文件
(6)innodb_file_per_table = 1
独享表空间(关闭)
(7)innodb_open_files = 8192
innodb 打开文件句柄数

关于引擎是 myisam 的优化

(1)myisam_sort_buffer_size = 128M
MyISAM 表发生变化时重新排序所需的缓冲大小
(2)myisam_max_sort_file_size = 10G
MySQL 重建索引时所允许的最大临时文件的大小(当 REPAIR,ALTERTABLE 或者LOADDATAINFILE)。
如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
(3)myisam_repair_threads = 1
如果一个表拥有超过一个索引,MyISAM 可以通过并行排序使用超过一个线程去修复
这对于拥有多个 CPU 以及大量内存情况的用户是一个很好的选择
(4) myisam_recover
Verifique y repare automáticamente las tablas MyISAM que no están cerradas correctamente

Supongo que te gusta

Origin blog.csdn.net/weixin_48190891/article/details/108713072
Recomendado
Clasificación