SQL Avanzado (2) - MySQL bloqueo problema y que codifican las cuestiones relacionadas

1.mysql de codificación

1.1, la codificación mysql Vista

mysql> show variables like 'character%';
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| Variable_name | Value |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+

1,2, siempre que el mysql codificación

# vi /etc/my.cnf
如下(少补)[mysqld]
character‐set‐server=utf8
collation‐server=utf8_general_ci
sql_mode='NO_ENGINE_SUBSTITUTION'
[mysql]
default‐character‐set = utf8
[mysql.server]
default‐character‐set = utf8
[mysqld_safe]
default‐character‐set = utf8
[client]
default‐character‐set = utf8
重启mysql
# service mysqld restart
# 或者使用 service mysql restart
再次查看编码:
# mysql ‐uroot ‐p
mysql> show variables like 'character%';
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| Variable_name | Value |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 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/ |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
8 rows in set (0.00 sec)

1.3 directorio de archivos de configuración y MySQL Descripción

A, /etc/my.cnf que es mysql principal archivo de configuración
B, / var posición de almacenamiento / lib / mysql mysql base de datos de archivo de base de datos

[root@mysql etc]# cd /var/lib/mysql/
[root@mysql mysql]# ll
total 176172
‐rw‐rw‐‐‐‐. 1 mysql mysql 56 Oct 20 00:10 auto.cnf
‐rw‐rw‐‐‐‐. 1 mysql mysql 79691776 Oct 21 04:46 ibdata1
‐rw‐rw‐‐‐‐. 1 mysql mysql 50331648 Oct 21 04:46 ib_logfile0
‐rw‐rw‐‐‐‐. 1 mysql mysql 50331648 Oct 20 00:09 ib_logfile1
drwx‐‐‐‐‐‐. 2 mysql mysql 4096 Oct 21 01:38 itcast
drwx‐‐‐‐‐‐. 2 mysql mysql 4096 Oct 21 04:45 menagerie
drwx‐‐x‐‐x. 2 mysql mysql 4096 Oct 20 00:09 mysql
‐rw‐r‐‐‐‐‐. 1 mysql root 2219 Oct 20 00:14 mysql.err
‐rw‐rw‐‐‐‐. 1 mysql mysql 5 Oct 20 00:10 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 20 00:10 mysql.sock
drwx‐‐‐‐‐‐. 2 mysql mysql 4096 Oct 20 00:09 performance_schema
‐rw‐r‐‐r‐‐. 1 root root 111 Oct 20 00:09 RPM_UPGRADE_HISTORY
‐rw‐r‐‐r‐‐. 1 mysql mysql 111 Oct 20 00:09 RPM_UPGRADE_MARKER‐LAST
drwxr‐xr‐x. 2 mysql mysql 4096 Oct 20 00:09 test

Nuestra base de datos MySQL archivo de base de datos se almacena normalmente en un / VER / lib / mysql ** ** este directorio.
Log ubicación de almacenamiento de salida C, / var / log / mysql base de datos
D, puerto de vista. Netstat -nltp ver si se puede encontrar el puerto 3306

[root@mysql menagerie]# netstat ‐nltp
Active Internet connections (only servers)
Proto Recv‐Q Send‐Q Local Address Foreign Address
State PID/Program name
tcp 0 0 0.0.0.0:57958 0.0.0.0:*
LISTEN 1306/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:*
LISTEN 1284/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 1573/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:*
LISTEN 1362/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:*
LISTEN 1654/master
tcp 0 0 :::3306 :::*
LISTEN 37860/mysqld
tcp 0 0 :::49647 :::*
LISTEN 1306/rpc.statd
tcp 0 0 :::111 :::*
LISTEN 1284/rpcbind
tcp 0 0 :::22 :::*
LISTEN 1573/sshd
tcp 0 0 ::1:631 :::*
LISTEN 1362/cupsd
tcp 0 0 ::1:25 :::*
LISTEN 1654/master
[root@mysql mysql]# cat mysql.pid
37860

2. Base de datos de control de concurrencia (bloqueo)

2.1 concepto de bloqueo:

En primer lugar, vamos a entender bajo qué es un bloqueo de base de datos,

La cerradura es una transacción antes de acceso a una base de datos Xianxiang propuso recursos del sistema (por ejemplo, tablas y registros) solicitud, el bloque de recursos, se obtiene el bloqueo de transacción, es decir, asumir el control de los datos, en la transacción libera su bloqueo otras transacciones no pueden actualizar estos datos. Después de la retirada de la transacción, liberar los recursos bloqueados.

2.2 Bloqueo ¿Por qué?

数据库是一个多用户使用的共享资源,比如一个用户表 t_user,两个浏览器前面的人登录了同个一个账号,把电话号码改了。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。简单说,当一个执行sql语句的事务想要操作表记录之前,先向数据库发出请求,对你访问的记录集加锁,在这个事务释放这个锁之前,其他事务不能对这些数据进行更新操作。

2.3 bloquea la base de datos Categoría:

1. Bloqueo optimista:

El bloqueo optimista no está incorporado en la base de datos, debemos darnos cuenta de sí mismos. medios de bloqueo optimista que cuando el funcionamiento de la base de datos (actualización), la idea es muy optimista de que esta operación no dará lugar a un conflicto, cuando se trabaja con datos, no cualquier otro tratamiento especial (es decir, no con llave), mientras que la toma, después de la actualización, vaya a determinar si existe un conflicto.
Normalmente, esto se implementa: cuando los datos de la tabla para operar (actualización), la tabla de datos más dar un campo de versión (Version), cada vez que la operación, la pieza de registrar el número de versión se incrementa. Esto es de revisar la pieza de la historia, conseguir un campo de versión, si quiere operar (actualizado) para ese registro, la primera versión del juicio de valor en este momento es igual al valor de la versión de las veces sólo echa un vistazo, si son iguales, entonces el durante este período, no hay otros programas que manipulan, se puede realizar la actualización, el valor más 1 del campo de versión, el valor en el momento de la versión versión descubrimiento del valor no es igual a sólo salir si la actualización, entonces tiene este periodo hay otros programas que manipulan, y no se realiza la operación de actualización.
Ejemplo:
sola operación comprende tres pasos:
1. información del producto consultado

select (status,price,version) from t_goods where id=#{id}

2. La información de la mercancía generatriz
de estado 3. Revisión del producto 2

update t_goods

set status=2,version=version+1

where id=#{id} and version=#{version};

2. Bloqueo pesimista:

Y el optimismo es bloqueo pesimista de bloqueo correspondiente. El bloqueo pesimista es cuando se trabaja con datos que esta conflictos de datos se producen, debe operar en los mismos datos mediante la obtención de la lata de bloqueo durante cada operación, esto es muy similar a Java en sincronizada, por lo que necesitan cerraduras pesimistas pasar más tiempo. Además de la correspondiente optimismo bloqueo, el bloqueo pesimista se logra por la propia base de datos, utilice el tiempo, lo llamamos directamente a la base de datos correspondientes estados en él.
A continuación, se relaciona bloqueo pesimista para bloquear los otros dos conceptos vinieron a cabo bloqueos, que son compartidos y bloqueos exclusivos. los bloqueos compartidos y exclusivos son diferentes implementaciones de bloqueo pesimista , el bloqueo pesimista Talia pertenecen al ámbito de.

bloqueos compartidos:

S conocido cerraduras o leer cerraduras, además de unos objetos de datos bloqueo compartido pueden ser leídos por otras transacciones, pero no puede modificar , por lo general se se completa de lectura del objeto de datos, el bloqueo se libera inmediatamente

bloqueo exclusivo:

También conocido como bloqueo X o bloqueo de lectura, cuando el objeto de datos se combina con bloqueo exclusivo, una transacción debe ser clave con el fin de acceder al objeto de datos, hasta el final de la transacción de bloqueo se libera . Entre otras transacciones no pueden leer y modificarlo.

3. Bloqueo de línea:

Fila de bloqueo, comprender el significado literal, que es añadir un bloqueo de registro, que es un registro más la cerradura.
Por ejemplo, antes de la presentación de compartir la instrucción lock
SELECT * de la ciudad donde id = " 1" en el modo de bloqueo de acción,
debido a la mesa de la ciudad, campo id como clave principal, también es equivalente al índice. Al realizar el bloqueo, este índice se grabará Identificación 1 más el bloqueo, el bloqueo es un bloqueo de registro.

MySQL Resumen mecanismo de bloqueo

motor de almacenamiento 1.mysql

MYISAM (tabla de bloqueo), INNODB (bloqueos de registro)

Clasificación de bloqueo 2.MySQL

bloqueos de página

bloqueo de tabla: Bloqueo tamaño de partícula grande, pobre soporte para la concurrencia, estancamiento no provocará
un bloqueo de lectura: Cuando haga preguntas de la transacción actual, otras transacciones no se consulta las operaciones de
escritura de bloqueo: Actualidad durante las operaciones de modificación de datos tiempo, otras transacciones no puede modificar los datos

Bloqueo de línea: Bloqueo de pequeño tamaño, mejor soporte para un rendimiento concurrente, nos llevan fácilmente a un punto muerto, fácil de accionar búsqueda de texto completo (indexado)
de bloqueo de la acción: bloqueo de lectura es similar a
un bloqueo exclusivo: bloqueo de escritura similares
bloqueos de intención
intención bloqueo compartido
bloqueo exclusivo intención

Cómo implementar un bloqueo distribuido

El bloqueo optimista (Bloqueo de línea)
se controla basándose en el número de versión de datos

bloqueo pesimista (tabla de bloqueo)
basado en la realización de la mesa

3. Para las necesidades de aprendizaje de cosas MySQL o curriculum vitae

la optimización de SQL, optimización del rendimiento, índice, (b + árboles, árbol rojo-negro)

4. Otras funciones de bloqueo método implementado

Redis
SETNX ()
distribuye marco de bloqueo: redssion

ZooKeeper (máxima) dividida cerebro, ovejas
nodo znode

Publicados 122 artículos originales · ganado elogios 1 · vistas 7328

Supongo que te gusta

Origin blog.csdn.net/qq_36079912/article/details/104524086
Recomendado
Clasificación