问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 排序 九点几会排在第一位,然后十一点几会在最后,我想按大小排序,怎么实现呢

发布网友 发布时间:2022-04-08 09:18

我来回答

3个回答

懂视网 时间:2022-04-08 13:39

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

1、查询日志

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

查看查询日志是否开启参数:

MariaDB [mysql]> SHOW GLOBAL VARIABLES LIKE ‘%log%‘G;
*************************** 16. row ***************************
Variable_name: general_log
        Value: OFF
*************************** 17. row ***************************
Variable_name: general_log_file
        Value: example.log
*************************** 41. row ***************************
Variable_name: log_output
        Value: FILE
  • general_log:是否启用查询日志;

  • general_log_file:定义一般查询日志保存的文件;

  • log_output:日志的输出方式,定义时一般有三个值:{TABLE|FILE|NONE}

  •    日志的输出方式一般有三种方式:file(文件),table(表),none(不保存);其中前两个输出位置可以同时定义,用逗号分隔即可。none表示是开启日志功能但是不记录日志信息。file所在位置就是通过general_log_file参数定义的,而输出位置定义为表时查看日志的内容方式为:

    举例:

    开启查询日志,记录形式为表和文件:

    MariaDB [mysql]> SET GLOBAL general_log=‘ON‘;
    Query OK, 0 rows affected (0.08 sec)
    
    MariaDB [mysql]> SET GLOBAL log_output=‘file,table‘;
    Query OK, 0 rows affected (0.02 sec)
    
    [root@example.com ~]# cat /data/mydata/example.log
    /usr/local/mysql/bin/mysqld, Version: 10.0.21-MariaDB-log (Source distribution). started with:
    Tcp port: 3306  Unix socket: /tmp/mysql.sock
    Time                 Id Command    Argument
    150831 14:19:56	    4 Query	SET GLOBAL log_output=‘file,table‘
    150831 14:20:06	    4 Query	SHOW GLOBAL VARIABLES LIKE ‘%log%‘
    150831 14:21:14	    4 Query	SELECT DATABASE()
        4 Init DB	hellodb
    150831 14:21:25	    4 Query	SHOW TABLES
    150831 14:21:42	    4 Query	SELECT * FROM classes
    150831 14:21:48	    4 Query	SELECT * FROM students
    150831 14:22:00	    4 Query	SELECT * FROM courses
    MariaDB [mysql]> SELECT * FROM general_log;
    +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------+
    | event_time                 | user_host                 | thread_id | server_id | command_type | argument                           |
    +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------+
    | 2015-08-31 14:20:06.648747 | root[root] @ localhost [] |         4 |         1 | Query        | SHOW GLOBAL VARIABLES LIKE ‘%log%‘ |
    | 2015-08-31 14:21:14.432517 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT DATABASE()                  |
    | 2015-08-31 14:21:14.432695 | root[root] @ localhost [] |         4 |         1 | Init DB      | hellodb                            |
    | 2015-08-31 14:21:25.196230 | root[root] @ localhost [] |         4 |         1 | Query        | SHOW TABLES                        |
    | 2015-08-31 14:21:42.338430 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT * FROM classes              |
    | 2015-08-31 14:21:48.701132 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT * FROM students             |
    | 2015-08-31 14:22:00.563751 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT * FROM courses              |
    | 2015-08-31 14:42:19.030252 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT DATABASE()                  |
    | 2015-08-31 14:42:19.030429 | root[root] @ localhost [] |         4 |         1 | Init DB      | mysql                              |
    | 2015-08-31 14:42:27.950684 | root[root] @ localhost [] |         4 |         1 | Query        | SHOW TABLES                        |
    | 2015-08-31 14:42:54.122161 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT * FROM general_log          |
    | 2015-08-31 14:42:59.459797 | root[root] @ localhost [] |         4 |         1 | Query        | SELECT * FROM general_log          |
    +----------------------------+---------------------------+-----------+-----------+--------------+------------------------------------+


    2、慢查询日志

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

    慢查询日志的相关参数:

    MariaDB [mysql]> SHOW GLOBAL VARIABLES LIKE ‘long%‘;
    +-----------------+-----------+
    | Variable_name   | Value     |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.00 sec)
    
    MariaDB [mysql]> SHOW GLOBAL VARIABLES LIKE ‘%log%‘G;
    *************************** 58. row ***************************
    Variable_name: slow_query_log
            Value: OFF
    *************************** 59. row ***************************
    Variable_name: slow_query_log_file
            Value: example-slow.log

    参数说明:

    long_query_time: 10.000000:慢查询的时长,超出此时间均会记录为慢查询;

    slow_query_log={ON|OFF}:设定是否启用慢查询日志;其为全局变量,它的输出形式也取决log_output={TABLE|FILE|NONE};
    slow_query_log_file=example-slow.log:定义日志文件路径及名称;

    还有几个相关参数:
    log_slow_filter=admin,filesort,***********,tmp_table_on_disk :过滤器。
    log_slow_queries=ON:是否启用慢查询日志,此为会话变量,只是对当前用户有效。           log_slow_rate_limit=1:记录慢查询日志的速率。                               log_slow_verbosity :是否记录详细的慢查询日志。

    举例:

    启用慢查询日志:

    MariaDB [mysql]> SET GLOBAL slow_query_log=‘ON‘;
    Query OK, 0 rows affected (0.11 sec)

    将慢查询日志的输出形式定义为文件和表:

    MariaDB [mysql]> SET GLOBAL log_output=‘FILE,TABLE‘;
    Query OK, 0 rows affected (0.00 sec)

    若有慢查询日志可在下面两个表和文件中查询:

    MariaDB [hellodb]> SELECT * FROM mysql.slow_log;
    Empty set (0.00 sec)
    [root@example.com ~]# cat /data/mydata/example-slow.log


    3、错误日志

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

       默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。


    相关参数说明:

    log_error = /path/to/error_log_file :错误日志所在的位置;
    log_warnings = {1|0}:是否记录警告信息于错误日志中;

    由于错误日志是默认自动开启的,所以就可以查询错误日志的内容:

    [root@example.com ~]# tail /data/mydata/example.com.err 
    150831  9:25:34 [Note] InnoDB: Initializing buffer pool, size = 128.0M
    150831  9:25:34 [Note] InnoDB: Completed initialization of buffer pool
    150831  9:25:35 [Note] InnoDB: Highest supported file format is Barracuda.
    150831  9:25:35 [Note] InnoDB: 128 rollback segment(s) are active.
    150831  9:25:35 [Note] InnoDB: Waiting for purge to start
    150831  9:25:35 [Note] InnoDB:  Percona XtraDB (
    http://www.percona.com)
     5.6.25-73.1 started; log sequence number 1803679

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

    [root@example.com ~]#  vim /etc/my.cnf

    [mysqld]

    Log_error=DIR/[filename]

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

    删除错误日志:

       由于错误日志长时间记录会导致其文件的 增大,所以下面就使用日志滚动来将错误日志更新:

    查看系统原来的错误日志文件内容:

    [root@example.com ~]# ls -lh /data/mydata/example.com.err 
    -rw-r----- 1 mysql root 7.5K 8月  31 09:25 /data/mydata/example.com.err
    [root@example.com ~]# mv /data/mydata/example.com.err{,.old}
    [root@example.com ~]# ls /data/mydata/example.com.err.old 
    /data/mydata/example.com.err.old


    登录服务器,执行日志滚动命令:

    MariaDB [hellodb]> FLUSH LOGS;
    Query OK, 0 rows affected (0.01 sec)

    这样就可以看到错误日志文件已经更新:

    [root@example.com ~]# ls -lh /data/mydata/example.com.err*
    -rw-rw---- 1 mysql mysql    0 8月  31 15:35 /data/mydata/example.com.err
    -rw-r----- 1 mysql root  7.5K 8月  31 09:25 /data/mydata/example.com.err.old


    4、二进制日志

       二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。实际中二进制日志可以根据实际的需求做出日志滚动,可以在达到1G滚动,还可以根据时间需要进行手动滚动日志,同时服务器在重启后也会发生日志滚动。

    mysql二进制日志说明:

    安装时默认路径是在数据目录内,文件名可以在配置文件中更改,建议在初始化时就定义好日志的名字,不建议其和数据放在同一块物理设备上。

    [root@example.com ~]# ls /data/mydata/mysql-bin.*
    /data/mydata/mysql-bin.000001  /data/mydata/mysql-bin.000004
    /data/mydata/mysql-bin.000002  /data/mydata/mysql-bin.000005
    /data/mydata/mysql-bin.000003  /data/mydata/mysql-bin.index

    日志的格式属于二进制,故不能用文本方式来打开文件,需要用专门的命令mysqlbinlog来查看该文件。

    [root@example.com ~]# file /data/mydata/mysql-bin.000001 
    /data/mydata/mysql-bin.000001: MySQL replication log

    说明:二进制日志记录的方法有两种即:位置 position和时间time。二进制日志的功用:即时点恢复和复制;

    几个关于日志的命令:

    查看当前系统所在记录的二进制文件:

    MariaDB [hellodb]> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000005 |      365 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.02 sec)

    手动执行滚动日志,执行此命令会滚动二进制日志和中继日志:

    MariaDB [hellodb]> FLUSH LOGS;
    Query OK, 0 rows affected (0.01 sec)

    查看当前服务器中能被mysql所使用的二进制日志文件

    MariaDB [hellodb]> SHOW BINARY LOGS;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |      2361 |
    | mysql-bin.000002 |     13752 |
    | mysql-bin.000003 |      2103 |
    | mysql-bin.000004 |      1153 |
    | mysql-bin.000005 |       365 |
    +------------------+-----------+
    5 rows in set (0.00 sec)

    基于shell命令行查看

    [root@example.com ~]# cat /data/mydata/mysql-bin.index 
    ./mysql-bin.000001
    ./mysql-bin.000002
    ./mysql-bin.000003
    ./mysql-bin.000004
    ./mysql-bin.000005

    查看二进制文件所记录的内容:

    MariaDB [hellodb]> SHOW BINLOG EVENTS IN ‘log_file‘;

    基于指定位置之后查询:

    MariaDB [hellodb]> SHOW BINLOG EVENTS IN ‘log_file‘  FROM "End_log_pos";

    查看二进制文件除了可以在mysql的交互窗口进行查看外还可以使用mysqlbinlog命令在shell环境进行查看。

    常用选项:

  • --start-time:起始时间

  • --stop-time:结束时间

  • --start-position:起始位置

  • --stop-position:结束位置

  • 举例:

    下面两种方法均可查看的指定位置之后的二进制文件:

    [root@example.com ~]# mysqlbinlog --start-position 2015 /data/mydata/mysql-bin.000001
    MariaDB [hellodb]> SHOW BINLOG EVENTS IN ‘mysql-bin.000001‘ FROM 2015;

    MySQL记录二进制日志的格式:

  • 基于语句:默认的记录格式;

  • 基于行:定义的并非数据本身而是这一行的数据是什么;

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

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

    二进制日志文件内容格式:

  • 事件发生的日期和时间

  • 服务器ID:server id 1

  • 事件的结束位置:end_log_pos

  • 事件的类型:Query

  • 原服务器生成此事件时的线程ID:thread_id=26

  • 语句的时间戳和写入二进制日志文件的时间差:exec_time=1 

  • 错误代码:error_code=0

  • 事件内容

  • 事件位置,相当于下一事件的开始位置

  •  服务器参数:

  • log_bin = {ON|OFF}:是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。

  • log_bin_trust_function_creators:用于控制创建存储函数时如果会导致不安全的事件记录二进制日志条件下是否禁止创建存储函数。

  • sql_log_bin = {ON|OFF}:用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。

  • sync_binlog:设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。

  • binlog_format = {statement|row|mixed}:指定二进制日志的类型,默认为STATEMENT。

  • max_binlog_cache_size : 二进制日志缓冲空间大小,仅用于缓冲事务类的语句;

  • max_binlog_stmt_cache_size:非事务的与事务语句缓冲的共用大小。

  • max_binlog_size :二进制日志文件上限。

  •  建议:切勿将二进制日志与数据文件放在一同设备。


    5、中继日志

       主要是在mysql服务器的中从架构中的从服务器上用到的,当从服务器想要和主服务器进行数据的同步时,从服务器将主服务器的二进制日志文件拷贝到己的主机上放在中继日志中,然后调用SQL线程按照拷中继日志文件中的二进制日志文件执行以便就可达到数据的同步。

    配置参数:(只在从服务器上开启)

  • relay-log=  指定中继日志的位置和名字 

  • relay-log-index=  指定中继日志的名字的索引文件的位置和名字 

  • relay_log_purge={ON|OFF}:是否自动清理不再需要中继日志


  • 6、事务日志

       详细的记录了在什么时间发生了什么事,在哪个时间对哪些数据进行了改变,能后实现事件的重放,一般只记录对数据进行改变的操作,对于读操作一般不进行记录 

    事务日志为数据库服务器实现以下功能:

  • 将随机IO转换为顺序IO,大大的提高了数据库的性能,存储的数据可能存在在磁盘的不同位置,降低了数据的读取和操作性能。转换为顺序IO的原理为,先将数据存放在日志文件中,然后由RDBSM的后台将日志中的数据存放到磁盘上,这样就保证了存储的数据是连续的。 

  • 为事件重放提供基础,事务日志详细的记录了时间发生的时间以及操作的数据对象,事务进程可以根据这些信息进行时间重放 默认的事务日志文件有两个,位于数据目录下以ibdata+number结尾的数字,我们可以对事务日志的位置、文件大小、增长方式进行定义,定义的方法如下: 

  • 这里以使用支持事务的Innodb存储引擎为例 ,其相关参数:

  • innodb_data_home_dir = /innodata  定义存放事务日志的目录 

  • innodb_data_file_path = ibdata1:1024M  定义日志的名字和大小 

  • innodb_data_file_path = ibdata2:50M:autoextend  定义日志大小的增长方式


  • 本文出自 “粗茶淡饭” 博客,请务必保留此出处http://cuchadanfan.blog.51cto.com/9940284/1691244

    MySQL(十一)

    标签:mysql、数据库

    热心网友 时间:2022-04-08 10:47

    如果不是数字型的 ,那就强制转下。ORDER BY CAST (col1 AS UNSIGNED DECIMAL(20, 5))

    热心网友 时间:2022-04-08 12:05

    数据库中字段是不是数值型?如果是字符型就会出现所说的排序问题。改成数值型即可
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    情侣文案英文高级浪漫87句 Love to the people don't wave.什么意思 gladtomeetyou怎么 gladtomeetyou.怎么回答 2016生肖猴运程 武汉买房88平方满50万落户政策 非武汉市户口在武汉市购买70平方总价50万的商品房,可以转户口吗... 我想在武汉买一套50万左右的新房子,谁能告诉我现在武昌,关山,江夏,有... 支付宝怎么开通步数授权? 总价50万能在武汉买一套两室一天的二手房吗? 怎么用q币充值q点 三菱系统M80,现在面板上只有XYZ,怎么把A轴显示出来? 如何用Q币充值Q点 三菱m80怎么关加工完成的报警声,或者改报警次数。 三菱m80系统s01风扇停止和EmG报警 三菱m80系统怎么行复制程序- 问一问 三菱M80程序如何替换坐标 三菱M80怎样改成中文 三菱M80系统蜂鸣设置 三菱m80系统相对坐标清零 三菱M80如何在自动模式下修改程序 三菱m80系统输完数值后光标怎么设置不移动 加工中心三菱m80系统XY如何清零 三菱系统M80怎么在面板上直接按刀库正转反转手动换刀- 问一问 三菱M80系统面板显示AL03 三菱m80系统面板PROTECT是什么意思 好的网名 为什么我感觉我的保护欲和占有欲都很强烈? 一个男生对你保护欲很强,好不好?有啥好处? 我是女生对一个闺蜜特别好(单纯的),身边的朋友都说我保护欲很强,保护欲强的表现是什么? 三菱m80系统对刀教程 怎么样充值Q币Q点 用Q币能不能充值Q点,要怎么充? 关于JS邮箱验证的代表有些不懂,求大神指教 Q币和Q点在哪里充? 使用js如何判断输入的邮箱地址是企业邮箱还是个人邮箱呢? 可以把帐户里的Q币充值成Q点吗?怎么换? JavaScript如何验证邮箱是否合法?(不要用正则表达式)! 怎样充值q币和q点 JS验证邮箱和文本后,当值正确后,就不提示要怎么写 如何充值Q点 洛阳顺风车 JS验证注册信息,这个邮箱验证改怎么改能验证,现在只是验证不为空,别... Q点Q币要怎样充值 用手机直接充值Q币(Q点)是怎么弄的? js 正则中邮箱验证var reg =/^\w+@\w+\.\w+$/i;其中\.是什么意思,为什么... 如何充值Q币Q点? 如何用QQ卡充值Q币Q点? js怎么校验邮箱格式 并做到图里面的效果 嘉嘉到云南长途拼车的人怎么找? 为什么我的js在jsp页面验证邮箱不其作用呢?