Configurando y Optimizando un servidor. Nuevas mejoras en my.cnf y arrancando en utf8
Siguiendo la optimización del servidor comentada en otros post, por ejemplo el de: Configurando y Optimizando un servidor. my.cnf voy a explicar y añadir una configuración que he ido mejorado.
Adicionalmente incluyo los parámetros necesarios para arrancar el mysql en utf8.
Para ver la configuración con la que arranca, se conecta y devuelve los datos el mysql tendréis que ejecutar la siguiente query :
show variables like '%character%';
La cual os tiene que devolver los datos de la configuración de las variables de codificación, y os tiene que dar algo parecido a lo siguiente:
| character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci |
La siguiente configuración es la que he llegado a optimizar para un servidor CentOS con un procesador Quad Core de 8 núcleos y 4BG de ram. No digo que sea la mejor, pero a mi me está funcionando y el rendimiento es bueno. OJO!! arrancar el servidor mysql en utf8 sin tener toda vuestra aplicación en utf8 puede ser un completo desastre! a si que comprobar toda la codificación de vuestra aplicación antes.
Lo primero un backup
cp /etc/my.cnf /etc/my.cnf.backup
abrimos el archivo con vuestro editor favorito.
vi /etc/my.cnf
Agregar la siguiente configuración del mysql. Comprobar si los path de instalación y socket coinciden con lo que ya teníais, sino poner los vuestros(Ver las 2 primeras lineas).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
max_allowed_packet = 128M
# parametros para arrancar el mysql en utf8
# sino esta claro que toda la aplicacion está en utf8 no poner éstos parámetros
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
# Puerto y Socket
port = 3306
# Permitir conectar clientes con versiones de protocolos anteriores al 4.1
# http://dev.mysql.com/doc/refman/4.1/en/old-client.html
old_passwords = 1
# Controls the amount of memory allocated to the MyISAM index key cache
# http://dev.mysql.com/doc/refman/4.1/en/myisam-key-cache.html
key_buffer = 32M
# Query Cache
query_cache_limit = 1M
query_cache_size = 32M
query_cache_type = 1
# Limite de conexiones
max_connections = 100
max_user_connections = 70
back_log = 25
# Buffers
sort_buffer_size = 16M
join_buffer_size = 32M
read_buffer_size = 4M
# Deshabilitar las tablas del tipo BDB
skip-bdb
bdb_cache_size = 0
bdb_max_lock = 0
# Numero de tablas abiertas mantener en la cache, para comprobar las tablas abiertas:
# mysql> SHOW STATUS LIKE 'Opened_tables';
# http://dev.mysql.com/doc/refman/5.0/es/table-cache.html
table_cache = 8192
# Logs
#log = /tmp/mysql.log
# grep -v "admin@localhost" /tmp/mysql.log | grep Conn | awk '{ print $5 }' | grep "@" | sort | uniq -c | sort -nr | head -10
# log_slow_queries = /var/log/mysqld.log
# log-queries-not-using-indexes
log_error = /var/log/mysqld.log
# http://dev.mysql.com/doc/refman/5.0/en/error-log.html
# log_warnings = 0 -> se desactivan el logeo de warnings en el error log.
# log_warnings = 1 -> se logean los warnings en el error log.
# log_warnings = 2 -> se logean los warnings + "aborted connections":
# http://dev.mysql.com/doc/refman/5.0/en/communication-errors.html
log_warnings = 0
# Deshabilitar la resolucion DNS en las nuevas conexiones
# http://dev.mysql.com/doc/refman/5.0/en/dns.html
# http://hackmysql.com/dns
skip-name-resolve
# MySQL cerrara aquellas conexiones que llevan mas de X segundos inactivas
# http://jeremy.zawodny.com/blog/archives/000173.html
wait_timeout = 60
# El numero de segundos que espera el servidor para actividad en una conexion
# interactiva antes de cerrarla, en lugar de utilizar wait_timeout. Un cliente
# interactivo se define como un cliente que usa la opcion CLIENT_INTERACTIVE
# para mysql_real_connect().
interactive_timeout = 60
# Tiempo de espera maximo permitido en las conexiones contra el servidor MySQL
connect_timeout = 15
# Numero de threads en cache para reutilizar, ajustar segun relacion:
# 100 - ((Threads_created / Connections) * 100) ~= 100 %
thread_cache_size = 64
# Tiempo en segundos para considerar una consulta SQL como "slow query"
long_query_time = 10
# Evitar tablas temporales en disco, principalmente afecta a consultas "GROUP BY"
# http://www.mysqlperformanceblog.com/2007/01/19/tmp_table_size-and-max_heap_table_size/
# Deseable que "mysqladmin ext | grep Created_tmp_disk_tables" sea 0
tmp_table_size = 64M
max_heap_table_size = 32M
# Si se hace mucho uso de MyISAM, el valor deberia ser 2x o 3x de table_cache
open_files_limit = 8192
# Deshabilitar "External Locking"
# http://dev.mysql.com/doc/refman/4.1/en/external-locking.html
skip-external-locking
# Tamano maximo de paquetes de comunicacion, un unica sentencia SQL
# http://dev.mysql.com/doc/refman/5.0/es/packet-too-large.html
max_allowed_packet = 16M
# Tamano inicial del bufer para la comunicacion cliente/servidor, pero puede
# crecer hasta max_allowed_packet bytes cuando sea necesario
net_buffer_length = 32K
# Maximum number of temporary tables a client can keep open at the same time.
max_tmp_tables = 64
# The stack size for each thread
thread_stack = 128K
# Deshabilitar los "INSERT DELAYED" (inserccion de registros encoladas para
# insertar cuando la tabla no esta en uso).
max_delayed_threads = 0
# myisam_sort_buffer_size <-- PRIO
# thread_concurrency
#==============================================================================
# InnoDB
#==============================================================================
# El tamano del buffer de memoria que InnoDB emplea para el almacenamiento
# intermedio de los datos e indices de sus tablas. Mientras mas grande sea este
# valor, menores operaciones de E/S en disco seran necesarias para acceder a los
# datos de las tablas. Simil con "key_buffer_size" para tablas MyISAM.
# http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
innodb_buffer_pool_size = 32M
# This variable stores the internal data structure. Make sure it is big enough
# to store data about all your InnoDB tables (you will see warnings in the error
# log if the server is using OS memory instead)
innodb_additional_mem_pool_size = 10M
# The size of the buffer which InnoDB uses to write log to the log files on
# disk. Sensible values range from 1M to half the combined size of log files.
# A big log buffer allows large transactions to run without a need to write the
# log to disk until the transaction commit. Thus, if you have big transactions,
# making the log buffer big will save disk I/O.
innodb_log_buffer_size = 10M
[mysql.server]
user = mysql
basedir =/var/lib
[mysqld_safe]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
log-slow-queries=/var/log/mysql-slow-queries.log
skip-bdb
#log-error=/var/log/mysqld.log
#pid-file=/var/run/mysqld/mysqld.pid
Reinicar el servicio de mysql
1
/etc/init.d/mysqld restart
Nachín! este va por ti! ;)