MySQL的日志基础知识及基本操作学习教程

MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;

日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。

错误日志

在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。

错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。

下面我们来定义mysql错误日志的功能:

一般而言,日志级别的定义没有回话变量都只是在全局级别下进行定义。

mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
+-----------------------------------------+-----------------------------------+
| Variable_name              | Value               |
+-----------------------------------------+-----------------------------------+
| back_log                | 50                |
| binlog_cache_size            | 32768               |
| binlog_direct_non_transactional_updates | OFF                |
| binlog_format              | MIXED               |
| binlog_stmt_cache_size          | 32768               |
| expire_logs_days             | 0                 |
| general_log               | OFF                |
| general_log_file             | /mydata/data/stu18.log       |
| innodb_flush_log_at_trx_commit      | 1                 |
| innodb_locks_unsafe_for_binlog      | OFF                |
| innodb_log_buffer_size          | 8388608              |
| innodb_log_file_size           | 5242880              |
| innodb_log_files_in_group        | 2                 |
| innodb_log_group_home_dir        | ./                 |
| innodb_mirrored_log_groups        | 1                 |
| log                   | OFF                |
| log_bin                 | ON                |
| log_bin_trust_function_creators     | OFF                |
| log_error                | /mydata/data/stu18.magedu.com.err |定义错误日志
| log_output               | FILE               |
| log_queries_not_using_indexes      | OFF                |
| log_slave_updates            | OFF                |
| log_slow_queries            | OFF                |
| log_warnings               | 1        是否把警告信息写入错误日志中
| max_binlog_cache_size          | 18446744073709547520        |
| max_binlog_size             | 1073741824             |
| max_binlog_stmt_cache_size        | 18446744073709547520        |
| max_relay_log_size            | 0                 |
| relay_log                |                  |
| relay_log_index             |                  |
| relay_log_info_file           | relay-log.info           |
| relay_log_purge             | ON                 |
| relay_log_recovery            | OFF                |
| relay_log_space_limit          | 0                 |
| slow_query_log              | OFF                |
| slow_query_log_file           | /mydata/data/stu18-slow.log    |
| sql_log_bin               | ON                |
| sql_log_off               | OFF                |
| sync_binlog               | 0                 |
| sync_relay_log              | 0                 |
| sync_relay_log_info           | 0                 |
+-----------------------------------------+-----------------------------------+

其中,log_error可以直接定义为文件路径,也可以为ON|OFF;log_warings只能使用1|0来定义开关启动。

更改错误日志位置可以使用log_error来设置形式如下:

[root@stu18 data]# vim /etc/my.cnf
[mysqld]
Log_error=DIR/[filename]

解析:其中,DIR参数指定错误日志的路径filename参数是错误日志的名称,没有指定该参数时默认为主机名。重启mysql服务器即可生效。

查看mysql错误日志:

[root@stu18 data]# tail -20 stu18.magedu.com.err
130813 15:30:50 InnoDB: Starting shutdown...
130813 15:30:51 InnoDB: Shutdown completed; log sequence number 1630920
130813 15:30:51 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
130813 15:30:52 mysqld_safe mysqld from pid file /mydata/data/stu18.magedu.com.pid ended
130813 15:30:53 mysqld_safe Starting mysqld daemon with databases from /mydata/data
130813 15:30:54 InnoDB: The InnoDB memory heap is disabled   #禁用了InnoDB memory的堆功能。
130813 15:30:54 InnoDB: Mutexes and rw_locks use GCC atomic builtins #Mutexes(互斥量)和rw_locks(行级锁)是GCC编译的是InnoDB内置的。
130813 15:30:54 InnoDB: Compressed tables use zlib 1.2.3   #默认压缩工具是zlib
130813 15:30:55 InnoDB: Initializing buffer pool, size = 128.0M  #InnoDB引擎的缓冲池(buffer pool)的值大小
130813 15:30:55 InnoDB: Completed initialization of buffer pool
130813 15:30:55 InnoDB: highest supported file format is Barracuda.
130813 15:30:57 InnoDB: Waiting for the background threads to start
130813 15:30:58 InnoDB: 5.5.33 started; log sequence number 1630920
130813 15:30:58 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130813 15:30:58 [Note]  - '0.0.0.0' resolves to '0.0.0.0'; #0.0.0.0会反解主机名,这里反解失败
130813 15:30:58 [Note] Server socket created on IP: '0.0.0.0'.
130813 15:30:58 [Note] Event Scheduler: Loaded 0 events  #事件调度器没有任何事件,因为没有装载。
130813 15:30:58 [Note] /usr/local/mysql/bin/mysqld: ready for connections. #mysql启动完成等待客户端的请求。
Version: '5.5.33-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution #创建一个本地sock用于本地连接。

删除错误日志:

在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin –u root –pflush-logs也可以使用登录mysql数据库中使用FLUSHLOGS语句来开启新的错误日志。

在mysql5.5.7之后:服务器将关闭此项功能。只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的:方式如下:

[root@stu18 data]# mv stu18.magedu.com.err stu18.magedu.com.err.old
 [root@stu18 data]# mysqladmin flush-logs
[root@stu18 data]# ls
hellodb myclass mysql-bin.000003 mysql-bin.index      stu18.magedu.com.pid   ibdata1   mysql   mysql-bin.000004 performance_schema  ib_logfile0 mysql-bin.000001 stu18.magedu.com.err      test  ib_logfile1 mysql-bin.000002 stu18.magedu.com.err.old

查询日志:

默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

查看查询日志是否开启:

mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
+-----------------------------------------+-----------------------------------+
| Variable_name              | Value               |
+-----------------------------------------+-----------------------------------+
| back_log                | 50                |
| binlog_cache_size            | 32768               |
| binlog_direct_non_transactional_updates | OFF                |
| binlog_format              | MIXED               |
| binlog_stmt_cache_size          | 32768               |
| expire_logs_days             | 0                 |
| general_log               | OFF    #定义查询日志是否开启 |
| general_log_file             | /mydata/data/stu18.log  #定义查询日志的文件地址名称             |
| innodb_flush_log_at_trx_commit      | 1                 |
| innodb_locks_unsafe_for_binlog      | OFF                |
| innodb_log_buffer_size          | 8388608              |
| innodb_log_file_size           | 5242880              |
| innodb_log_files_in_group        | 2                 |
| innodb_log_group_home_dir        | ./                 |
| innodb_mirrored_log_groups        | 1                 |
| log                   | OFF     #是否开启日志 (若开启则表示开启所有的日志功能)         |
| log_bin                 | ON                |
| log_bin_trust_function_creators     | OFF                |
| log_error                | /mydata/data/stu18.magedu.com.err |
| log_output               | FILE  #日志的输出的位置     |
| log_queries_not_using_indexes      | OFF                |
| log_slave_updates            | OFF                |
| log_slow_queries             | OFF                |
| log_warnings               | 1                 |
| max_binlog_cache_size          | 18446744073709547520        |
| max_binlog_size             | 1073741824             |
| max_binlog_stmt_cache_size        | 18446744073709547520        |
| max_relay_log_size            | 0                 |
| relay_log                |                  |
| relay_log_index             |                  |
| relay_log_info_file           | relay-log.info           |
| relay_log_purge             | ON                |
| relay_log_recovery            | OFF                |
| relay_log_space_limit          | 0                 |
| slow_query_log              | OFF                |
| slow_query_log_file           | /mydata/data/stu18-slow.log    |
| sql_log_bin               | ON                |
| sql_log_off               | OFF                |
| sync_binlog               | 0                 |
| sync_relay_log              | 0                 |
| sync_relay_log_info           | 0                 |
+-----------------------------------------+-----------------------------------+
41 rows in set (0.00 sec)

拓展解析:日志的输出位置一般有三种方式:file(文件),table(表),none(不保存);其中前两个输出位置可以同时定义,none表示是开启日志功能但是记录日志信息。file就是通过general_log_file |/mydata/data/stu18.log 等方式定义的,而输出位置定义为表时查看日志的内容方式为:

mysql> use mysql;          #在此数据库中
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql      |
+---------------------------+
| columns_priv       |
| db            |
| event           |
| func           |
| general_log        |   #这个就是查询日志的表输出位置
| help_category       |
| help_keyword       |
| help_relation       |
| help_topic
………………        |
+---------------------------+

慢查询日志:

慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。

查看慢查询日志的定义:

mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
| slow_query_log     | OFF  #定义慢查询日志的
| slow_query_log_file  |/mydata/data/stu18-slow.log  #输出方式为file(文件)时定义慢查询日志的位置

启动和设置慢查询日志:

1、通过配置文件my.cnf中的log-slow-queries选项可以开启慢查询日志;形式如下:

[root@stu18 data]# vim /etc/my.cnf
[mysqld]
slow_query_log=1
log-slow-queries [= DIR/[filename] ]

其中,DIR参数指定慢查询日志的存储路径;filename参数指定日志的文件名,生成日志文件的完成名称为filename-slow.log。如果不指定存储路径,慢查询日志默认存储到mysql数据库的数据文件下,如果不指定文件名,默认文件名为hostname-slow.log。

2、通过登录mysql服务器直接定义,方式如下:

首先要有全局权限;然后执行mysql>set global slow_query_log=1;

时间默认超过多少的称为慢查询日志?

一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:

mysql> SHOW GLOBAL VARIABLES LIKE 'long%';
+-----------------+-----------+
| Variable_name  | Value   |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.04 sec)

注释:其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间。

测试是否可以记录日志:

mysql> set globalslow_query_log=1;    #开启慢查询日志
Query OK, 0 rowsaffected (0.35 sec)
mysql> setsession long_query_time=0.001;   #更改时间(当前session中,退出则重置)
Query OK, 0 rowsaffected (0.00 sec)
mysql> set globallong_query_time=0.001;   #更改时间(全局中,重启服务则重置)
mysql> SHOWVARIABLES LIKE 'long%';     #查询定义时间
+-----------------+----------+
| Variable_name  | Value  |
+-----------------+----------+
| long_query_time |0.001000 |
+-----------------+----------+
1 row in set (0.00sec)
mysql> showglobal variables like "%slow%"; #查看慢查询日志开启状态
+---------------------+-----------------------------+
| Variable_name    | Value            |
+---------------------+-----------------------------+
|log_slow_queries  | ON             |
|slow_launch_time  | 2              |
|slow_query_log   | ON             |
|slow_query_log_file | /mydata/data/stu18-slow.log |
+---------------------+-----------------------------+
4 rows in set (0.03sec)

查看慢查询日志:

mysql> use mysql
mysql> selectuser,host,password from user where user="root";
+------+------------------+----------+
| user | host       | password |
+------+------------------+----------+
| root |localhost    |     |
| root |stu18.magedu.com |     |
| root |127.0.0.1    |     |
| root | ::1       |     |
+------+------------------+----------+
4 rows in set (0.08sec)    #查询时间为0.08
mysql> systemmore /mydata/data/stu18_slow.log     #查询慢查询日志记录信息
/usr/local/mysql/bin/mysqld,Version: 5.5.33-log (Source distribution). started
with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time         Id Command  Argument
>>>>>>>>>>>>>>>>部分已省略>>>>>>>>>>>>>>
# Time: 13100723:46:33
# User@Host:root[root] @ localhost []
# Query_time:0.108459 Lock_time: 0.000216 Rows_sent:4 Rows_examined: 6
SETtimestamp=1381160793;
selectuser,host,password from user where user="root";

事务日志:

事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。

如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。

查看事务日志的定义:

mysql> SHOWGLOBAL VARIABLES LIKE '%log%';
+-----------------------------------------+-----------------------------------+
| Variable_name              | Value               |
+-----------------------------------------+-----------------------------------+
| innodb_flush_log_at_trx_commit     | 1    #在事务提交时innodb是否同步日志从缓冲到文件中1表示事务以提交就同步不提交每隔一秒同步一次,性能会很差造成大量的磁盘I/O;定义为2表示只有在事务提交时才会同步但是可能会丢失整个事务   |
|innodb_locks_unsafe_for_binlog     |OFF                |
| innodb_log_buffer_size         | 8388608              |
|innodb_log_file_size          |5242880              |
| innodb_log_files_in_group        | 2   #至少有两个        |
|innodb_log_group_home_dir        |./   #定义innodb事务日志组的位置    |
|innodb_mirrored_log_groups       |1  #表示对日志组做镜像     |

每个事务日志都是大小为5兆的文件:

[root@stu18 data]#ls -lh
-rw-rw---- 1 mysqlmysql 5.0M Oct 7 23:36 ib_logfile0
-rw-rw---- 1 mysqlmysql 5.0M Aug 12 01:06 ib_logfile1

二进制日志:

二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。

二进制开启状态:

mysql> showglobal variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name          | Value |
+---------------------------------+-------+
| log_bin             | ON  | #已开启
|log_bin_trust_function_creators | OFF  |
| sql_log_bin           | ON  |
+---------------------------------+-------+

二进制日志相关的参数:

mysql> showglobal variables like "%log%";
sql_log_bin ={ON|OFF}   #用于控制会话级别二进制日志功能的开启或关闭。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。
binlog_cache_size =32768  #默认值32768 Binlog Cache用于在打开了二进制日志(binlog)记录功能的环境,是MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了。
binlog_stmt_cache_size= 32768    #当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。
log_bin = mysql-bin#指定binlog的位置,默认在数据目录下。
binlog-format= {ROW|STATEMENT|MIXED}   #指定二进制日志的类型,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。
sync_binlog = 10#设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步
max_binlog_cache_size= {4096 .. 18446744073709547520}   #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。
max_binlog_stmt_cache_size= {4096 .. 18446744073709547520}  #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存
expire_log_days ={0..99}  #设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。

二进制日志定义方式:

其一、log_bin可以直接定义为文件路径,也可以为ON|OFF。

其二、通过编辑my.cnf中的log-bin选项可以开启二进制日志;形式如下:

[root@stu18 ~]#my.cnf
[mysqld]
log-bin [=DIR \ [filename]]

其中,DIR参数指定二进制文件的存储路径;filename参数指定二级制文件的文件名,其形式为filename.number,number的形式为000001、000002等。每次重启mysql服务或运行mysql> flush logs;都会生成一个新的二进制日志文件,这些日志文件的number会不断地递增。除了生成上述的文件外还会生成一个名为filename.index的文件。这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。

[root@stu18 ~]# cd /mydata/data/
[root@stu18 data]#ls -lh
-rw-rw---- 1 mysqlmysql 14K Aug 13 15:30 mysql-bin.000001
-rw-rw---- 1 mysqlmysql 150 Aug 13 17:05 mysql-bin.000002
-rw-rw---- 1 mysqlmysql 150 Aug 13 17:06 mysql-bin.000003
-rw-rw---- 1 mysqlmysql 150 Aug 13 17:07 mysql-bin.000004
-rw-rw---- 1 mysqlmysql 150 Aug 13 17:39 mysql-bin.000005
-rw-rw---- 1 mysqlmysql 126 Aug 13 19:03 mysql-bin.000006
-rw-rw---- 1 mysqlmysql 126 Aug 13 19:03 mysql-bin.000007
-rw-rw---- 1 mysqlmysql 126 Aug 13 19:05 mysql-bin.000008
-rw-rw---- 1 mysqlmysql 107 Aug 13 19:05 mysql-bin.000009
-rw-rw---- 1 mysqlmysql 353 Oct 7 23:40 mysql-bin.000010
-rw-rw---- 1 mysqlmysql 190 Oct 7 20:43 mysql-bin.index
[root@stu18 data]#cat mysql-bin.index
./mysql-bin.000001
./mysql-bin.000002
./mysql-bin.000003
./mysql-bin.000004
./mysql-bin.000005
./mysql-bin.000006
./mysql-bin.000007
./mysql-bin.000008
./mysql-bin.000009
./mysql-bin.000010

如果说我们向某个表的某个字段插入一个数据而这个数据为当前时间(日期时间型);过段时间将此二进制文件应用到另一台服务器上数据就会变动从而导致数据的不一致性所以说对于这种非确定性的数据使用默认的语句定义并不是可靠的;

二进制日志中常用的定义格式:

1、语句(statement):默认的记录格式;

2、行(row):定义的并非数据本身而是这一行的数据是什么;

3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。

其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。

查看二进制日志:

二进制日志的定义方式为二进制格式;使用此格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是不能直接使用查看命令打开并查看二进制日志。

mysql> showbinary logs;   #显示当前服务器使用的二进制文件及大小
+------------------+-----------+
| Log_name     | File_size |
+------------------+-----------+
| mysql-bin.000001|   13814 |
| mysql-bin.000002|    150 |
| mysql-bin.000003|    150 |
| mysql-bin.000004|    150 |
| mysql-bin.000005|    150 |
| mysql-bin.000006|    126 |
| mysql-bin.000007|    126 |
| mysql-bin.000008|    126 |
| mysql-bin.000009|    107 |
| mysql-bin.000010|    353 |
+------------------+-----------+
10 rows in set (0.07sec)
mysql> showmaster logs;   #显示主服务器使用的二进制文件及大小
+------------------+-----------+
| Log_name     | File_size |
+------------------+-----------+
| mysql-bin.000001|   13814 |
| mysql-bin.000002|    150 |
| mysql-bin.000003|    150 |
| mysql-bin.000004|    150 |
| mysql-bin.000005|    150 |
| mysql-bin.000006|    126 |
| mysql-bin.000007|    126 |
| mysql-bin.000008|    126 |
| mysql-bin.000009|    107 |
| mysql-bin.000010|    353 |
+------------------+-----------+
10 rows in set (0.02sec)
mysql> showmaster status;  #当前使用的二进制文件及所处位置
+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010|   353 |       |         |
+------------------+----------+--------------+------------------+
1 row in set (0.00sec)

小扩展:二进制日志的记录位置:通常为上一个事件执行结束时间的位置,每一个日志文件本身也有自己的元数据所以说对于当前版本的mysql来说二进制的开始位置通常为107;

mysql> flushlogs;
Query OK, 0 rowsaffected (0.23 sec)

注意:flush logs一般只会滚动中继日志和二进制日志。

mysql> showmaster status;
+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000011|   107 |       |         |
+------------------+----------+--------------+------------------+
1 row in set (0.00sec)

查看当前二进制文件的信息:

mysql> createdatabase yong;
Query OK, 1 rowaffected (0.12 sec)
mysql> createtable yong.tb1 (id int,name char(20));
Query OK, 0 rowsaffected (0.44 sec)
mysql> insertinto yong.tb1 values(1,'tom');
Query OK, 1 rowaffected (0.14 sec)
mysql> showmaster status;
+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000011|   479 |       |         |
+------------------+----------+--------------+------------------+
1 row in set (0.00sec)

查看二进制日志信息的命令:

SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
mysql> showbinlog events\G     #查看所有的二进制信息
***************************87. row ***************************
  Log_name: mysql-bin.000001
    Pos: 13580
 Event_type: Query
 Server_id: 1
End_log_pos: 13688
    Info: use `hellodb`; /*!40000 ALTERTABLE `toc` DISABLE KEYS */
***************************88. row ***************************
  Log_name: mysql-bin.000001
    Pos: 13688
 Event_type: Query
 Server_id: 1
End_log_pos: 13795
    Info: use `hellodb`; /*!40000 ALTERTABLE `toc` ENABLE KEYS */
***************************89. row ***************************
  Log_name: mysql-bin.000001
    Pos: 13795
 Event_type: Stop
 Server_id: 1
End_log_pos: 13814
    Info:
89 rows in set (0.00sec)
mysql> showbinlog events in 'mysql-bin.000011';  #查看指定日志的二进制信息
+------------------+-----+-------------+-----------+-------------+----------------------------------------------+
| Log_name     | Pos | Event_type | Server_id | End_log_pos | Info                     |
+------------------+-----+-------------+-----------+-------------+----------------------------------------------+
| mysql-bin.000011|  4 | Format_desc |     1 |     107 | Server ver: 5.5.33-log, Binlogver: 4    |
| mysql-bin.000011 |107 | Query    |     1 |     190 | create database yong             |
| mysql-bin.000011 |190 | Query    |     1 |     293 | create table yong.tb1 (idint,name char(20)) |
| mysql-bin.000011 |293 | Query    |     1 |     357 | BEGIN                    |
| mysql-bin.000011 |357 | Query    |     1 |     452 | insert into yong.tb1values(1,'tom')     |
| mysql-bin.000011 |452 | Xid     |     1 |     479 | COMMIT /* xid=103 */             |
+------------------+-----+-------------+-----------+-------------+----------------------------------------------+
6 rows in set (0.00sec)
mysql> showbinlog events in 'mysql-bin.000011' from 190; #从指定的事件位置开始
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
| Log_name     | Pos | Event_type | Server_id |End_log_pos | Info                     |
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
| mysql-bin.000011 |190 | Query   |     1 |     293 | create table yong.tb1 (idint,name char(20)) |
| mysql-bin.000011 |293 | Query   |     1 |     357 | BEGIN                    |
| mysql-bin.000011 |357 | Query   |     1 |     452 | insert into yong.tb1values(1,'tom')     |
| mysql-bin.000011 |452 | Xid    |     1 |     479 | COMMIT /* xid=103 */             |
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
4 rows in set (0.00sec)
mysql> showbinlog events in 'mysql-bin.000011' from 190 limit 3; #指定偏移量(不是语句,是事件)
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
| Log_name     | Pos | Event_type | Server_id |End_log_pos | Info                     |
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
| mysql-bin.000011 |190 | Query   |     1 |     293 | create table yong.tb1 (idint,name char(20)) |
| mysql-bin.000011 |293 | Query   |     1 |     357 | BEGIN                    |
| mysql-bin.000011 |357 | Query   |     1 |     452 | insert into yong.tb1values(1,'tom')     |
+------------------+-----+------------+-----------+-------------+----------------------------------------------+
3 rows in set (0.00sec)

命令行下查看二进制日志:

由于无法使用cat等方式直接打开并查看二进制日志;所以必须使用mysqlbinlog命令。但是当正在执行mysql读写操作时建议不要使用此打开正在使用的二进制日志文件;若非要打开可flush logs。mysqlbinlog命令的使用方式:

[root@stu18 data]#mysqlbinlog mysql-bin.000017    #必须在数据目录下

/

*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET@@session.max_insert_delayed_threads=0*/;
/*!50003 SET@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4    #事件开始处
#131009 0:25:59 server id 1 end_log_pos 107  Start: binlog v 4, server v 5.5.33-log created 131009 0:25:59
# Warning: thisbinlog is either in use or was not closed properly.
BINLOG '
FzJUUg8BAAAAZwAAAGsAAAABAAQANS41LjMzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#131009 0:26:36 server id 1 end_log_pos 192  Query  thread_id=12  exec_time=0 error_code=0   #131009 0:26:36年月日的简写方式;end_log_pos事件结束处;thread_id=12 哪个会话线程创建的此语句;exec_time=0 执行时长单位为秒;error_code=0 错误代码0表示没有
SET TIMESTAMP=1381249596/*!*/;   #预设信息(环境设定)

导出此数据库的信息:

[root@stu18 data]#mysqlbinlog mysql-bin.000017 > /tmp/a.sql

导入此数据库的信息:

[root@stu18 data]#mysql < a.sql

删除二进制日志信息:

二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:

1、删除所有的二进制日志(不可效仿):

使用RESET MASTER语句可以删除所有的二进制日志。该语句的形式如下:

mysql> resetmaster;  
Query OK, 0 rowsaffected (0.17 sec)
mysql> showbinary logs;
+------------------+-----------+
| Log_name     | File_size |
+------------------+-----------+
| mysql-bin.000001|    107 |
+------------------+-----------+
1 row in set (0.04sec)

解析:首先不建议在生产环境下使用此操作;删除所有的二进制日志后,Mysql将会重新创建新的二进制日志。新二进制日志的编号从000001开始。

2、根据文件或时间点来删除二进制日志:

语法形式:

mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

其中TO'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr指定把哪个时间之前的二进制文件删除了。

mysql> PURGEBINARY LOGS TO 'mysql-bin.000007';
Query OK, 0 rowsaffected (0.11 sec)
mysql> showbinary logs;
+------------------+-----------+
| Log_name     | File_size |
+------------------+-----------+
| mysql-bin.000007|    150 |
| mysql-bin.000008|    150 |
| mysql-bin.000009|    150 |
| mysql-bin.000010|    150 |
| mysql-bin.000011|    150 |
| mysql-bin.000012|    150 |
| mysql-bin.000013|    150 |
| mysql-bin.000014|    150 |
| mysql-bin.000015|    150 |
| mysql-bin.000016|    150 |
| mysql-bin.000017|    483 |
+------------------+-----------+
11 rows in set (0.04sec)
[root@stu18 data]#cat mysql-bin.index
./mysql-bin.000007
./mysql-bin.000008
./mysql-bin.000009
./mysql-bin.000010
./mysql-bin.000011
./mysql-bin.000012
./mysql-bin.000013
./mysql-bin.000014
./mysql-bin.000015
./mysql-bin.000016
./mysql-bin.000017

由此可以看出这种清理二进制日志文件的方式是非常合理的,不会导致数据库的错误发生。

mysql> PURGEBINARY LOGS BEFORE '13-10-19 10:26:36'; #使用时间来删除二进制日志
Query OK, 0 rowsaffected (0.05 sec)

PS:MySQL中日志相关常用的服务器变量说明:
expire_logs_days={0..99}
设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。作用范围为全局,可用于配置文件,属动态变量。

general_log={ON|OFF}
设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项。如若启用此项,其输出位置则由--log_output选项进行定义,如果log_output的值设定为NONE,即使用启用查询日志,其也不会记录任何日志信息。作用范围为全局,可用于配置文件,属动态变量。

general_log_file=FILE_NAME
查询日志的日志文件名称,默认为“hostname.log"。作用范围为全局,可用于配置文件,属动态变量。

binlog-format={ROW|STATEMENT|MIXED}
指定二进制日志的类型,默认为STATEMENT,建议更改为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。作用范围为全局或会话,可用于配置文件,且属于动态变量。

log={YES|NO}
是否启用记录所有语句的日志信息于一般查询日志(general query log)中,默认通常为OFF。MySQL 5.6已经弃用此选项。

log-bin={YES|NO}
是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。其仅用于显示是否启用了二进制日志,并不反应log-bin的设定值。作用范围为全局级别,属非动态变量。

log_bin_trust_function_creators={TRUE|FALSE}
此参数仅在启用二进制日志时有效,用于控制创建存储函数时如果会导致不安全的事件记录二进制日志条件下是否禁止创建存储函数。默认值为0,表示除非用户除了CREATE ROUTING或ALTER ROUTINE权限外还有SUPER权限,否则将禁止创建或修改存储函数,同时,还要求在创建函数时必需为之使用DETERMINISTIC属性,再不然就是附带READS SQL DATA或NO SQL属性。设置其值为1时则不启用这些限制。作用范围为全局级别,可用于配置文件,属动态变量。

log_error=/PATH/TO/ERROR_LOG_FILENAME
定义错误日志文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。

log_output={TABLE|FILE|NONE}
定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。作用范围为全局级别,可用于配置文件,属动态变量。

log_query_not_using_indexes={ON|OFF}
设定是否将没有使用索引的查询操作记录到慢查询日志。作用范围为全局级别,可用于配置文件,属动态变量。

log_slave_updates
用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的生效需要在从服务器上启用二进制日志功能。

log_slow_queries={YES|NO}
是否记录慢查询日志。慢查询是指查询的执行时间超出long_query_time参数所设定时长的事件。MySQL 5.6将此参数修改为了slow_query_log。作用范围为全局级别,可用于配置文件,属动态变量。

log_warnings=#
设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。

long_query_time=#
设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量。

max_binlog_cache_size{4096 .. 18446744073709547520}
二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。作用范围为全局级别,可用于配置文件,属动态变量。

max_binlog_size={4096 .. 1073741824}
设定二进制日志文件上限,单位为字节,最小值为4K,最大值为1G,默认为1G。某事务所产生的日志信息只能写入一个二进制日志文件,因此,实际上的二进制日志文件可能大于这个指定的上限。作用范围为全局级别,可用于配置文件,属动态变量。

max_relay_log_size={4096..1073741824}
设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。

innodb_log_buffer_size={262144 .. 4294967295}
设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务可以借助于更大的日志缓冲区来避免在事务完成之前将日志缓冲区的数据写入日志文件,以减少I/O操作进而提升系统性能。因此,在有着较大事务的应用场景中,建议为此变量设定一个更大的值。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_log_file_size={108576 .. 4294967295}
设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为明智的取值范围是从1MB到缓存池体积的1/n,其中n表示日志组中日志文件的个数。日志文件越大,在缓存池中需要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障恢复速度。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_log_files_in_group={2 .. 100}
设定日志组中日志文件的个数。InnoDB以循环的方式使用这些日志文件。默认值为2。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_log_group_home_dir=/PATH/TO/DIR
设定InnoDB重做日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_support_xa={TRUE|FLASE}
存储引擎事务在存储引擎内部被赋予了ACID属性,分布式(XA)事务是一种高层次的事务,它利用“准备”然后“提交”(prepare-then-commit)两段式的方式将ACID属性扩展到存储引擎外部,甚至是数据库外部。然而,“准备”阶段会导致额外的磁盘刷写操作。XA需要事务协调员,它会通知所有的参与者准备提交事务(阶段1)。当协调员从所有参与者那里收到“就绪”信息时,它会指示所有参与者进行真正的“提交”操作。
此变量正是用于定义InnoDB是否支持两段式提交的分布式事务,默认为启用。事实上,所有启用了二进制日志的并支持多个线程同时向二进制日志写入数据的MySQL服务器都需要启用分布式事务,否则,多个线程对二进制日志的写入操作可能会以与原始次序不同的方式完成,这将会在基于二进制日志的恢复操作中或者是从服务器上创建出不同原始数据的结果。因此,除了仅有一个线程可以改变数据以外的其它应用场景都不应该禁用此功能。而在仅有一个线程可以修改数据的应用中,禁用此功能是安全的并可以提升InnoDB表的性能。作用范围为全局和会话级别,可用于选项文件,属动态变量。

relay_log=file_name
设定中继日志的文件名称,默认为host_name-relay-bin。也可以使用绝对路径,以指定非数据目录来存储中继日志。作用范围为全局级别,可用于选项文件,属非动态变量。

relay_log_index=file_name
设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index。作用范围为全局级别,可用于选项文件,属非动态变量。

relay-log-info-file=file_name
设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info。作用范围为全局级别,可用于选项文件,属非动态变量。

relay_log_purge={ON|OFF}
设定对不再需要的中继日志是否自动进行清理。默认值为ON。作用范围为全局级别,可用于选项文件,属动态变量。

relay_log_space_limit=#
设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数。作用范围为全局级别,可用于选项文件,属非动态变量。

slow_query_log={ON|OFF}
设定是否启用慢查询日志。0或OFF表示禁用,1或ON表示启用。日志信息的输出位置取决于log_output变量的定义,如果其值为NONE,则即便slow_query_log为ON,也不会记录任何慢查询信息。作用范围为全局级别,可用于选项文件,属动态变量。

slow_query_log_file=/PATH/TO/SOMEFILE
设定慢查询日志文件的名称。默认为hostname-slow.log,但可以通过--slow_query_log_file选项修改。作用范围为全局级别,可用于选项文件,属动态变量。

sql_log_bin={ON|OFF}
用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

sql_log_off={ON|OFF}
用于控制是否禁止将一般查询日志类信息记录进查询日志文件。默认为OFF,表示不禁止记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

sync_binlog=#
设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。 建议设置为1。

(0)

相关推荐

  • 深入mysql基础知识的详解

    1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理. 2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程. 3.当发起对MySQL服务器的连接时,服务器会对 username,host,password进行验证.而一旦连接上,服务器就会检测其权限. 4.MySQL查询缓存只会保存 SELECT 语句和相应的结果.在解析查询之前会询问查询缓存,如果查询缓存中能找到相应的结果就直接返回结果. 5.MySQL的 data 文件夹下会根据每个数据库

  • 关于mysql基础知识的介绍

    一.启动与退出1.进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可.此时的提示符是:mysql>或打开终端,输入SQL语句:mysql –uroot –p123 2.退出MySQL:quit或exit 二.库操作1.创建数据库命令:create database <数据库名>例如:建立一个名为xhkdb的数据库mysql> create database xhkdb; 2.显示所有的数据库命令:show da

  • Mysql基础知识点汇总

    1.什么是SQL语句 sql语言:结构化的查询语言.(Structured Query Language),是关系数据库管理系统的标准语言. 它是一种解释语言:写一句执行一句,不需要整体编译执行. 语法特点: 1.没有" ",字符串使用' '包含 2.没有逻辑相等,赋值和逻辑相等都是= 3.类型不再是最严格的.任何数据都可以包含在' '以内 4.没有bool值的概念,但是在视图中可以输入true/false 5.它也有关系运算符:> < >= <= = <

  • mysql学习笔记之基础知识

    查看数据库 show databases; 创建数据库 create DATABASE 数据库名称 create DATABASE databasetest; 选择数据库 use 数据库名称 use databasetest; ------------ Database changed;切换成功 查看当前数据库名称 SELECT DATABASE(); 删除数据库 drop DATABASE 数据库名称 drop DATABASE databasetest; 数据库状态 status; ----

  • mysql基础知识扫盲

    本篇主要介绍关于mysql的一些非常基础的知识,为后面的sql优化做准备. 一:连接mysql 关于mysql的下载和安装我在这里就不说了,第一步我们要连接我们的mysql服务器,打开cmd命令切换到你安装MySQL Server 的bin目录下,然后输入mysql -h localhost -u root -p 其中-h 表示你的主机地址(本机就是localhost,记住不要带端口号) -u 就是连接数据库名称 -p就是连接密码.出现以下图就表示连接成功了 二:常用的sql语句 2.1:创建数

  • Mysqli基础知识

    相信原来在开始学习php的时候,很多人使用的数据库首选MySQL,连接数据库的扩展首选mysql扩展,但随着php版本的提高,mysql扩展正逐渐被mysqli和PDO所取代.正如使用mysql函数时给出的deprecated: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead.学习mysqli扩展势在必行了. 相对于mysql扩展,mysqli扩展支持面向

  • MySQL的日志基础知识及基本操作学习教程

    MySQL日志主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是说用来记录mysql数据库的客户端连接状况.SQL语句的执行情况和错误信息等.当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复. 错误日志 在mysql数据库中,错误日志功能是默认开启的.并且,错误日志无法被禁止.默认情况下,错误日志存储在mysql数据库的数据文件中.错误日志文件

  • MySQL 慢日志相关知识总结

    1.慢日志简介 慢日志全称为慢查询日志(Slow Query Log),主要用来记录在 MySQL 中执行时间超过指定时间的 SQL 语句.通过慢查询日志,可以查找出哪些语句的执行效率低,以便进行优化. 默认情况下,MySQL 并没有开启慢日志,可以通过修改 slow_query_log 参数来打开慢日志.与慢日志相关的参数介绍如下: slow_query_log:是否启用慢查询日志,默认为0,可设置为0.1,1表示开启. slow_query_log_file:指定慢查询日志位置及名称,默认值

  • MySQL 数据库的基础知识

    目录 1. 认识数据库 1.1 数据库和数据结构的关系 1.2 为什么需要数据库 1.3 数据库的存储 2. SQL 2.1 介绍 2.2 分类 3. 数据库的类别 3.1 关系型数据库 3.2 非关系型数据库 3.3 区别 4. MySQL 的程序结构 4.1 客户端和服务器 4.2 MySQL 的客户端-服务器结构 4.3 MySQL 服务器 1. 认识数据库 1.1 数据库和数据结构的关系 数据结构: 是指相互之间存在一种或多种特定关系的数据元素的集合,是一个抽象的学科 我们熟知的数据结构

  • python 专题九 Mysql数据库编程基础知识

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 首先下载mysql-5.0.96-winx64,安装

  • MySQL存储引擎基础知识

    在之前的文章中我们说过MySQL事务,现在大家都应该知道了MySQL事务了吧,还记得事务的ACID原则吗?不记得的童鞋可以回顾一下<MySQL之事务初识>,其实呀,更严谨一点的话,应该是MySQL InnoDB存储引擎,因为在MySQL中,只有InnoDB存储引擎才支持事务.看到此处,有些朋友可能有以下疑问: 存储引擎是什么? MySQL中有哪些存储引擎? 每个存储引擎有哪些特点以及区别? 下面,我们带着这些疑问,依次往下看: 存储引擎是什么? 通俗一点来说,MySQL是用来保存数据的对不对?

  • MySQL中的唯一索引的简单学习教程

    mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQUE吧. 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE. 把它定义为一个唯一索引. 创建表时直接设置: DROP TABLE IF EXISTS `st

  • MySQL中LIKE子句相关使用的学习教程

    MySQL LIKE 语法 LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法如下: WHERE column LIKE pattern WHERE column NOT LIKE pattern 在 LIKE 前面加上 NOT 运算符时,表示与 LIKE 相反的意思,即选择 column 不包含 pattern 的数据记录. LIKE 通常与通配符 % 一起使用,% 表示通配 pattern 中未出现的内容.而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效

  • MySQL的子查询及相关优化学习教程

    一.子查询 1.where型子查询 (把内层查询结果当作外层查询的比较条件) #不用order by 来查询最新的商品 select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods); #取出每个栏目下最新的产品(goods_id唯一) select cat_id,goods_id,goods_name from goods where goods_id in(select max(

  • 快速学习MySQL基础知识

    这篇文章主要梳理了 SQL 的基础用法,会涉及到以下方面内容: SQL大小写的规范 数据库的类型以及适用场景 SELECT 的执行过程 WHERE 使用规范 MySQL 中常见函数 子查询分类 如何选择合适的 EXISTS 和 IN 子查询 了解 SQL SQL 是我们用来最长和数据打交道的方式之一,如果按照功能划分可分为如下 4 个部分: DDL,数据定义语言.定义数据库对象,数据表,数据列.也就是,对数据库和表结构进行增删改操作. DML,数据操作语言.对数据表的增删改. DCL,数据控制语

  • Spring+SpringMVC+MyBatis深入学习及搭建(一)之MyBatis的基础知识

    1.对原生态jdbc程序中问题总结 1.1 jdbc程序 需求:使用jdbc查询mysql数据库中用户表的记录 statement:向数据库中发送一个sql语句 预编译statement:好处:提高数据库性能. 预编译statement向数据库中发送一个sql语句,数据库编译sql语句,并把编译的结果保存在数据库砖的缓存中.下次再发sql时,如果sql相同,则不会再编译,直接使用缓存中的. jdbc编程步骤: 1. 加载数据库驱动 2. 创建并获取数据库链接 3. 创建jdbc statemen

随机推荐