发布新日志

  • mysql-使用UDFs对memcache进行操作

    2016-06-08 08:57:51

    UDFs是User Defined Functions的缩写,表示MySQL的用户定义函数,应用程序可以利用这些函数从MySQL 5.0以上版本的数据库中访问Memcached写入或者获取的数据。
    此外,MySQL从5.1版本开始支持触发器,从而可以在触发器中使用UDFs直接更新Mcmcached的内容,这种方式降低了应用程序设计和编写的复杂性。

    安装UDFs需要在数据库服务器上安装两个包,分别是libmemcached和memcached_functions_mysql


    libmemcached下载地址:https://launchpad.net/libmemcached/
    memcached_functions_mysql下载地址:https://launchpad.net/memcached-udfs/+milestones


    安装成功后,登录mysql,可以使用命令查看UDFs:
    PS:示例为1.1版本的memcached_functions_mysql结果;不同版本支持的函数不同。

    mysql> select * from mysql.func;         
    +------------------------------+-----+---------------------------------+----------+
    | name                         | ret | dl                              | type     |
    +------------------------------+-----+---------------------------------+----------+
    | memc_add                     |   2 | libmemcached_functions_mysql.so | function |
    | memc_add_by_key              |   2 | libmemcached_functions_mysql.so | function |
    | memc_servers_set             |   2 | libmemcached_functions_mysql.so | function |
    | memc_server_count            |   2 | libmemcached_functions_mysql.so | function |
    | memc_set                     |   2 | libmemcached_functions_mysql.so | function |
    | memc_set_by_key              |   2 | libmemcached_functions_mysql.so | function |
    | memc_cas                     |   2 | libmemcached_functions_mysql.so | function |
    | memc_cas_by_key              |   2 | libmemcached_functions_mysql.so | function |
    | memc_get                     |   0 | libmemcached_functions_mysql.so | function |
    | memc_get_by_key              |   0 | libmemcached_functions_mysql.so | function |
    | memc_get_cas                 |   2 | libmemcached_functions_mysql.so | function |
    | memc_get_cas_by_key          |   2 | libmemcached_functions_mysql.so | function |
    | memc_delete                  |   2 | libmemcached_functions_mysql.so | function |
    | memc_delete_by_key           |   2 | libmemcached_functions_mysql.so | function |
    | memc_append                  |   2 | libmemcached_functions_mysql.so | function |
    | memc_append_by_key           |   2 | libmemcached_functions_mysql.so | function |
    | memc_prepend                 |   2 | libmemcached_functions_mysql.so | function |
    | memc_prepend_by_key          |   2 | libmemcached_functions_mysql.so | function |
    | memc_increment               |   2 | libmemcached_functions_mysql.so | function |
    | memc_decrement               |   2 | libmemcached_functions_mysql.so | function |
    | memc_replace                 |   2 | libmemcached_functions_mysql.so | function |
    | memc_replace_by_key          |   2 | libmemcached_functions_mysql.so | function |
    | memc_servers_behavior_set    |   2 | libmemcached_functions_mysql.so | function |
    | memc_servers_behavior_get    |   0 | libmemcached_functions_mysql.so | function |
    | memc_behavior_set            |   2 | libmemcached_functions_mysql.so | function |
    | memc_behavior_get            |   0 | libmemcached_functions_mysql.so | function |
    | memc_list_behaviors          |   0 | libmemcached_functions_mysql.so | function |
    | memc_list_hash_types         |   0 | libmemcached_functions_mysql.so | function |
    | memc_list_distribution_types |   0 | libmemcached_functions_mysql.so | function |
    | memc_udf_version             |   0 | libmemcached_functions_mysql.so | function |
    | memc_libmemcached_version    |   0 | libmemcached_functions_mysql.so | function |
    | memc_stats                   |   0 | libmemcached_functions_mysql.so | function |
    | memc_stat_get_keys           |   0 | libmemcached_functions_mysql.so | function |
    | memc_stat_get_value          |   0 | libmemcached_functions_mysql.so | function |
    +------------------------------+-----+---------------------------------+----------+
    34 rows in set (0.00 sec)


    注意:
    memcached_functions_mysql在V1.0以前的版本,函数返回值,默认0表示成功,1表示失败;
    但在V1.0开始,修改了返回值,0表示失败,1表示成功;

    见:
    https://launchpad.net/memcached-udfs/+milestone/version-1.0
    Changelog
    1.0 Thursday, July 30, 2009 12:00:00 EST 2009
     * Fixed issue of setting NULLs with user-defined variables (Thanks to
     Jean-Jacques Moortgat @ aol dot com !)
     * Fixed issue of obtaining a NULL value FROM memcached
     * All set functions now return 0 (failure) or 1 (success)
     * Other cleanups
     * More tests
  • 使用sysbench测试mysql性能

    2016-05-26 15:52:57

    sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。

    它主要包括以下几种方式的测试:

    1、cpu性能

    2、磁盘io性能

    3、调度程序性能

    4、内存分配及传输速度

    5、POSIX线程性能

    6、数据库性能(OLTP基准测试)


    sysbench下载地址:http://downloads.mysql.com/source/sysbench-0.4.12.10.tar.gz

    安装过程:

    tar xzvf sysbench-0.4.12.10.tar.gz 

    cd sysbench-0.4.12.10

    ./configure 

    make

    make install


    确认是否安装成功:

    # sysbench --version

    sysbench 0.4.12.10


    sysbench参数:

    # sysbench

    Missing required command argument.

    Usage:

      sysbench [general-options]... --test=<test-name> [test-options]... command


    General options:

      --num-threads=N             number of threads to use [1]

      --max-requests=N            limit for total number of requests [10000]

      --max-time=N                limit for total execution time in seconds [0]

      --forced-shutdown=STRING    amount of time to wait after --max-time before forcing shutdown [off]

      --thread-stack-size=SIZE    size of stack per thread [32K]

      --init-rng=[on|off]         initialize random number generator [off]

      --seed-rng=N                seed for random number generator, ignored when 0 [0]

      --tx-rate=N                 target transaction rate (tps) [0]

      --tx-jitter=N               target transaction variation, in microseconds [0]

      --report-interval=N         periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]

      --report-checkpoints=[LIST,...]dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []

      --test=STRING               test to run

      --debug=[on|off]            print more debugging info [off]

      --validate=[on|off]         perform. validation checks where possible [off]

      --help=[on|off]             print help and exit

      --version=[on|off]          print version and exit


    Log options:

      --verbosity=N      verbosity level {5 - debug, 0 - only critical messages} [4]


      --percentile=N      percentile rank of query response times to count [95]


    Compiled-in tests:

      fileio - File I/O test

      cpu - CPU performance test

      memory - Memory functions speed test

      threads - Threads subsystem performance test

      mutex - Mutex performance test

      oltp - OLTP test


    Commands: prepare run cleanup help version


    See 'sysbench --test=<name> help' for a list of options for each test.


    这里进行oltp测试:

    PS:联机事务处理OLTP(on-line transaction processing)主要是执行基本的、日常的事务处理,比如数据库记录的增、删、改、查。


    # sysbench --test=oltp help

    sysbench 0.4.12.10:  multi-threaded system evaluation benchmark


    oltp options:

      --oltp-test-mode=STRING                  test type to use {simple,complex,nontrx,sp} [complex]

      --oltp-reconnect-mode=STRING             reconnect mode {session,transaction,query,random} [session]

      --oltp-sp-name=STRING                    name of store procedure to call in SP test mode []

      --oltp-read-only=[on|off]                generate only 'read' queries (do not modify database) [off]

      --oltp-avoid-deadlocks=[on|off]          generate update keys in increasing order to avoid deadlocks [off]

      --oltp-skip-trx=[on|off]                 skip BEGIN/COMMIT statements [off]

      --oltp-range-size=N                      range size for range queries [100]

      --oltp-point-selects=N                   number of point selects [10]

      --oltp-use-in-statement=N                Use IN-statement with 10 PK lookups per query [0]

      --oltp-simple-ranges=N                   number of simple ranges [1]

      --oltp-sum-ranges=N                      number of sum ranges [1]

      --oltp-order-ranges=N                    number of ordered ranges [1]

      --oltp-distinct-ranges=N                 number of distinct ranges [1]

      --oltp-index-updates=N                   number of index update [1]

      --oltp-non-index-updates=N               number of non-index updates [1]

      --oltp-nontrx-mode=STRING                mode for non-transactional test {select, update_key, update_nokey, insert, delete} [select]

      --oltp-auto-inc=[on|off]                 whether AUTO_INCREMENT (or equivalent) should be used on id column [on]

      --oltp-connect-delay=N                   time in microseconds to sleep after connection to database [10000]

      --oltp-user-delay-min=N                  minimum time in microseconds to sleep after each request [0]

      --oltp-user-delay-max=N                  maximum time in microseconds to sleep after each request [0]

      --oltp-table-name=STRING                 name of test table [sbtest]

      --oltp-table-size=N                      number of records in test table [10000]

      --oltp-dist-type=STRING                  random numbers distribution {uniform,gaussian,special} [special]

      --oltp-dist-iter=N                       number of iterations used for numbers generation [12]

      --oltp-dist-pct=N                        percentage of values to be treated as 'special' (for special distribution) [1]

      --oltp-dist-res=N                        percentage of 'special' values to use (for special distribution) [75]

      --oltp-point-select-mysql-handler=[on|off]Use MySQL HANDLER for point select [off]

      --oltp-point-select-all-cols=[on|off]    select all columns for the point-select query [off]

      --oltp-secondary=[on|off]                Use a secondary index in place of the PRIMARY index [off]

      --oltp-num-partitions=N                  Number of partitions used for test table [0]

      --oltp-num-tables=N                      Number of test tables [1]


    General database options:


      --db-driver=STRING  specifies database driver to use ('help' to get list of available drivers)

      --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]


    Compiled-in database drivers:

      mysql - MySQL driver


    mysql options:

      --mysql-host=[LIST,...]       MySQL server host [localhost]

      --mysql-port=N                MySQL server port [3306]

      --mysql-socket=STRING         MySQL socket

      --mysql-user=STRING           MySQL user [sbtest]

      --mysql-password=STRING       MySQL password []

      --mysql-db=STRING             MySQL database name [sbtest]

      --mysql-table-engine=STRING   storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]

      --mysql-engine-trx=STRING     whether storage engine used is transactional or not {yes,no,auto} [auto]

      --mysql-ssl=[on|off]          use SSL connections, if available in the client library [off]

      --myisam-max-rows=N           max-rows parameter for MyISAM tables [1000000]

      --mysql-create-options=STRING additional options passed to CREATE TABLE []

      

    常用的参数列表


    --mysql-host=test.mysql.rds.aliyuncs.com #数据库host 

    --mysql-port=3306 #数据库端口 

    --mysql-user=your_username #数据库用户名 

    --mysql-password=your_password #数据库密码 

    --mysql-db=your_db_for_test #数据库名 

    --mysql-table-engine=STRING   storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated},默认存储引擎为[innodb]

    --oltp-tables-count=10 #模拟的表的个数,规格越高该值越大 

    --oltp-table-size=6000000 #模拟的每张表的行数,规格越高该值越大 

    --oltp-table-name=sbtest #测试表名,默认为[sbtest]

    --num-threads=50 #模拟的并发数量,规格越高该值越大 

    --max-requests=100000000 #最大请求次数 

    --max-time=20 #最大测试时间(与--max-requests只要有一个超过,则退出) 

    --report-interval=1 #每1秒打印一次当前的QPS等值 

    --test=oltp #OLTP基准测试

    [prepare | run | cleanup] #prepare准备数据,run执行测试,cleanup清理数据


    测试样例:


    准备数据:

    sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=postfix --mysql-password=postfix --mysql-db=test --oltp-table-size=4000000 --oltp-table-name=yuntest --max-requests=100000 --num-threads=300 --mysql-table-engine=myisam prepare


    执行测试:

    sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=postfix --mysql-password=postfix --mysql-db=test --oltp-table-size=4000000 --oltp-table-name=yuntest --max-requests=100000 --num-threads=300 --mysql-table-engine=myisam run


    测试结果:

    # time sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=postfix --mysql-password=postfix --mysql-db=test --oltp-table-size=4000000  --oltp-table-name=yuntest --max-requests=100000 --num-threads=300 --mysql-table-engine=myisam run

    sysbench 0.4.12.10:  multi-threaded system evaluation benchmark


    No DB drivers specified, using mysql

    Running the test with following options:

    Number of threads: 300

    Random number generator seed is 0 and will be ignored


    Doing OLTP test.

    Running mixed OLTP test

    Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)

    Using "LOCK TABLES WRITE" for starting transactions

    Using auto_inc on the id column

    Maximum number of requests for OLTP test is limited to 100000

    Using 1 test tables

    Threads started!

    Done.


    OLTP test statistics:

        queries performed:

            read:                            1400000

            write:                           500000

            other:                           200000

            total:                           2100000

        transactions:                        100000 (455.68 per sec.)

        deadlocks:                           0      (0.00 per sec.)

        read/write requests:                 1900000 (8657.91 per sec.)

        other operations:                    200000 (911.36 per sec.)


    General statistics:

        total time:                          219.4526s

        total number of events:              100000

        total time taken by event execution: 65719.8341

        response time:

             min:                                 39.30ms

             avg:                                657.20ms

             max:                                763.08ms

             approx.  95 percentile:             685.38ms


    Threads fairness:

        events (avg/stddev):           333.3333/0.47

        execution time (avg/stddev):   219.0661/0.19


    清理数据:

    sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=postfix --mysql-password=postfix --mysql-db=test --oltp-table-size=4000000 --oltp-table-name=yuntest --max-requests=100000 --num-threads=300 --mysql-table-engine=myisam cleanup

  • mysql-IP处理函数inet_aton()和inet_ntoa()简介-zt

    2016-01-13 09:28:29

    转自:http://blog.sina.com.cn/s/blog_6c3748830100vwn0.html

    一、INET_ATON(expr)

        给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

        mysql> SELECT INET_ATON('209.207.224.40');

            -> 3520061480

        产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算。

        INET_ATON() 也能理解短格式 IP 地址:

        mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

            -> 2130706433, 2130706433

             注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至  2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见11.2节,“数值类型”。

    二、INET_NTOA(expr)

        给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。
           
        mysql> SELECT INET_NTOA(3520061480);

            -> '209.207.224.40'

  • mysql-导入数据或表结构时出错继续-yc

    2014-12-25 14:28:01

    平时我们导入数据或表结构的时候,我们一般用两种:

    1、登录mysql,再用source
    这种,有出错会提示,并继续下一个
    2、mysql < a.sql
    这种,有出错提示后,直接中断退出

    如果在脚本中导入,一般是不会用第一种操作
    这时,如果想要第一种的提示后继续的效果,可以使用:
    mysql -f <a.sql
    即增加-f参数,表示当遇到sql错误时继续

      -f, --force         Continue even if we get an sql error.
  • mysql-主从跨库操作同步探究-zt

    2014-10-27 10:11:43

    转自:http://blog.itpub.net/26252014/viewspace-1268479/

    实验参数:

    主库参数:binlog-do-db

    从库参数:replicate-do-dbreplicate-wild-do-table

    分六个情况进行实验,并观察日志变更情况。

    实验一:主库、从库均不设置参数

    实验二:主库不设置参数、从库设置replicate-do-db

    实验三:主库不设置参数、从库设置replicate-wild-do-table

    实验四:主库不设置参数、从库设置replicate-do-db和replicate-wild-do-table

    实验五:主库设置参数binlog-do-db、从库不设置参数

    实验六:主库设置参数binlog-do-db、从库设置replicate-do-db

    实验七:主库设置参数binlog-do-db、从库设置replicate-wild-do-table

    实验八:主库设置参数binlog-do-db、从库设置replicate-do-db和replicate-wild-do-table


    实验过程见原贴:http://blog.itpub.net/26252014/viewspace-1268479/


    总结:

    1、主库、从库有没有任何参数,默认库操作都是可以同步的。

    2、主库未设置binlog-do-db的情况下:

        a.从库设置replicate-do-db,跨库操作不同步

        b.从库设置replicate-wild-do-table,跨库操作同步

        c.从库设置replicate-do-db和replicate-wild-do-table,跨库操作不同步

        d.跨库操作后binlog会有变化

    3、主库设置binlog-do-db的情况下:

        a.从库设置replicate-do-db,跨库操作不同步

        b.从库设置replicate-wild-do-table,跨库操作不同步

        c.从库设置replicate-do-db和replicate-wild-do-table,跨库操作不同步

        d.跨库操作后binlog没有变化

    4、只有在主库、从库不设置参数的情况下,主库新建库,从库才可以同步。

  • mysql-select结果导出导入

    2013-10-16 18:51:13

    mysql常用的库表导出导入:
    mysqldump
    mysql < a.sql
    登录mysql后的source

    要对select结果集进行导出导入时,使用下面的方法:
    SELECT * from `table_a`  where penedBy="gao" INTO OUTFILE '/tmp/task.txt';
    LOAD DATA INFILE '/tmp/task.txt' INTO TABLE table_a;

    注意:into outfile使用类似/tmp这种有权限的目录文件;

    如果有乱码问题,可以不用scrt来进行上述操作,改成navicat等工具,执行导入命令,乱码显示正常;
    估计工具自动会设置编码;
  • mysql-利用replace对纯文本数据转换成HTML格式显示-yc

    2013-08-13 16:29:15


    ##########################################################
    REPLACE说明:

    REPLACE(str,from_str,to_str)
    在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串

    例:把表table中的name字段中的aa替换为bb
    update table set name=replace(name,'aa','bb')
    ##########################################################



    一个表字段,原来是纯文本编辑格式,后修改功能为支持HTML
    原来显示:
    111
    222
    修改后,显示为:111 222

    为了使其正确显示,修改数据库数据为HTML格式;
    &lt;p&gt;111&lt;/p&gt;
    &lt;p&gt;222&lt;/p&gt;
    即:
    <p>111</p>
    <p>222</p>


    处理方法:
    update `table_a` set `field`=Replace(`field`,"\r\n","&lt;/p&gt;&lt;p&gt;");
    //把"\r\n"替换成"&lt;/p&gt;&lt;p&gt;"
    //=>111&lt;/p&gt;&lt;p&gt;222&lt;/p&gt;&lt;p&gt;


    update `table_a` set `field`=CONCAT(`field`,"&lt;/p&gt;");
    //在字段后面补上"&lt;/p&gt;"
    //=>111&lt;/p&gt;&lt;p&gt;222&lt;/p&gt;&lt;p&gt;&lt;/p&gt;


    update `table_a` set `field`=CONCAT("&lt;p&gt;",`field`);
    //在字段前面增加"&lt;p&gt;"
    //=>&lt;p&gt;111&lt;/p&gt;&lt;p&gt;222&lt;/p&gt;&lt;p&gt;&lt;/p&gt;


    update `table_a` set `field`=Replace(`field`,"&lt;p&gt;&lt;/p&gt;","");
    //去除字段最后的"&lt;p&gt;&lt;/p&gt;"
    //=>&lt;p&gt;111&lt;/p&gt;&lt;p&gt;222&lt;/p&gt;


    即:
    <p>111</p><p>222</p>
    这样页面就可以显示正常了


    注:纯文本,标准换行符为:\r\n,不标准的,有可能显示为\r或\n,如果遇到不标准的数据,可进行如下处理:
    update `table_a` set `field`=Replace(`field`,"\r\n","&lt;/p&gt;&lt;p&gt;");
    修改为:
    update `table_a` set `field`=Replace(`field`,"\r\n","\r");
    update `table_a` set `field`=Replace(`field`,"\n","\r");
    update `table_a` set `field`=Replace(`field`,"\r","&lt;/p&gt;&lt;p&gt;");
    即统一换行符格式后,再处理数据;
  • 自动和手动清理mysql-binlog日志

    2012-07-03 09:29:44

    mysql-binlog日志文件较占用硬盘空间,对mysql做定期备份后,可以把较早之前的binlog进行清理,以节省空间;


    设置自动清理MySQL binlog日志,配置my.cnf:

    expire_logs_days = 10


    手动删除10天前的MySQL binlog日志:

    mysql >PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); 

  • mysql-通过备份的旧数据+mysqlbin日志进行数据恢复-yc

    2012-06-29 18:46:54

    测试服务器数据被误删除,使用备份的旧数据+mysqlbin日志进行大部份数据的恢复

    步骤记录如下:

    1、还原备份的数据;


    2、先查看mysql-bin日志文件的时间
    ll /var/lib/mysql/mysql-bin.*

    -rw-rw---- 1 mysql mysql     117 Jun  7 03:10 /var/lib/mysql/mysql-bin.000065
    -rw-rw---- 1 mysql mysql 3475332 Jun 29 18:13 /var/lib/mysql/mysql-bin.000066

    比如备份的旧数据为2012-06-20号,则需要找到备份后日志所写入的文件;
    mysql-bin.000065文件时间为2012-06-07,mysql-bin.000066文件时间为2012-06-29
    则可以判断,20号后写入的日志文件为:mysql-bin.000066


    3、使用mysqlbinlog进行确认
    mysqlbinlog /var/lib/mysql-bin.000066 > /tmp/mysql.log
    vi /tmp/mysql.log

    /*!*/;
    # at 622
    #120607 11:37:56 server id 1  end_log_pos 792   Query   thread_id=56    exec_time=0     error_code=0
    SET TIMESTAMP=1339040276/*!*/;
    update postoffice.domain set po_status=1,relay_ip='192.168.146.174',is_service='1' where domain = 'luly180.com'


    文件中,会有类似上述的一些信息;
    # at 622——表示日志文件位置为622
    #120607 11:37:56——表示操作时间为120607 11:37:56

    根据时间点及操作的语句,在还原的数据库确认是否已经操作过;
    查找到备份数据后第一个操作的语句及对应的时间;
    以及误操作语句及对应的时间;


    4、日志数据导出;
    假设备份数据后第一个操作语句的时间为:2012-06-20 14:09:02
    误操作前一条语句的时间为:2012-06-27 08:54:31
    则导出这个时间段内的数据:
    mysqlbinlog --start-date="2012-06-20 14:09:02" --stop-date="2012-06-27 08:54:31" /var/lib/mysql-bin.000066 > /tmp/mysql_restore.sql

    5、对/tmp/mysql_restore.sql进行确认,是否为需要恢复的数据;

    6、确认后,进行数据的恢复;
    source /tmp/mysql_restore.sql;

    7、对恢复后的数据进行确认;


    #######################################################

    附:mysql备份脚本,对/var/lib/mysql目录进行备份,备份文件如:mysql.20120702.tar.gz;再对两天前的文件进行清理;即只留最近三天的备份数据;

    #!/bin/bash
    #每天进行mysql数据库的备份,并且清理两天前的备份数据;
    d=`date +'%Y%m%d'`
    d1=`date -d '-3 day' +'%Y%m%d'`
    cd /var/lib
    tar czvf mysql.$d.tar.gz mysql
    if [[ $? -ge 0 ]]
    then
        rm -rf /var/lib/mysql.$d1.tar.gz
    fi


    crond中增加每天定时04点30分,执行任务:

    30 04 * * * root /usr/local/luly/backmysql.sh


  • mysql-Auto_increment值修改

    2012-03-13 12:13:31

    测试时,为了模拟一些特殊情况,需要修改某张表的下一条记录的Auto_increment值
    可通过如下方法进行处理:

    查看db.table表的下一条记录auto_increment的值:
    show table status from db like 'table';

    如:
    mysql> show table status from mailbox like 'mailbox';         
    +---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+
    | Name    | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time          | Collation         | Checksum | Create_options | Comment |
    +---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+
    | mailbox | MyISAM |      10 | Dynamic    | 1681 |            148 |      249688 | 281474976710655 |       104448 |         0 |          15355 | 2012-03-13 11:19:10 | 2012-03-13 11:19:10 | 2012-03-13 11:19:10 | latin1_swedish_ci |     NULL |                |         |
    +---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+
    1 row in set (0.00 sec)

    Auto_increment:15355
    这个就是下一条记录会使用的自增ID;


    修改db.table表下一条记录使用的自增ID值为20000:
    alter table db.table auto_increment=20000;

    如:
    mysql> alter table mailbox.mailbox auto_increment=
    20000;          
    Query OK, 1681 rows affected (0.05 sec)

    这时再进行
    show table status from mailbox like 'mailbox'; 
    auto_increment已经变成20000;
    新插入的记录,自增字段就会从20000开始;
  • mysql-show slave status 参数详解-zt

    2012-02-07 10:40:01

    转自:http://www.diybl.com/course/7_databases/mysql/Mysqljs/20110923/560918.html


    Slave_IO_State:等待 master 发生事件

    Master_Host:当前的主服务器主机
    Master_User:被用于连接主服务器的当前用户
    Master_Port:当前的主服务器接口
    Connect_Retry:master-connect-retry选项的当前值
    Master_Log_File:I/O线程当前正在读取的主服务器二进制日志文件的名称
    Read_Master_Log_Pos:在当前的主服务器二进制日志中,I/O线程已经读取的位置
    Relay_Log_File:SQL线程当前正在读取和执行的中继日志文件的名称
    Relay_Log_Pos:在当前的中继日志中,SQL线程已读取和执行的位置
    Relay_Master_Log_File:由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称
    Slave_IO_Running:I/O线程是否被启动并成功地连接到主服务器上
    Slave_SQL_Running:SQL线程是否被启动

    Replicate_Do_DB:replicate-do-db选项的当前值
    Replicate_Ignore_DB:replicate-ignore-db选项的当前值
    Replicate_Do_Table:replicate-do-table选项的当前值
    Replicate_Ignore_Table:replicate-ignore-table选项的当前值
    Replicate_Wild_Do_Table:replicate-wild-do-table选项的当前值
    Replicate_Wild_Ignore_Table:replicate-wild-ignore_table选项的当前值
    Last_Errno:最近一次错误码
    Last_Error:最近一次错误内容
    Skip_Counter:最近被使用的用于SQL_SLAVE_SKIP_COUNTER的值
    Exec_Master_Log_Pos:来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置(Relay_Master_Log_File)。在主服务器的二进制日志中的(Relay_Master_Log_File,Exec_Master_Log_Pos)对应于在中继日志中的(Relay_Log_File,Relay_Log_Pos)
    Relay_Log_Space:所有原有的中继日志结合起来的总大小
    Until_Condition:如果没有指定UNTIL子句,则没有值。如果从属服务器正在读取,直到达到主服务器的二进制日志的给定位置为止,则值为Master。如果从属服务器正在读取,直到达到其中继日志的给定位置为止,则值为Relay
    Until_Log_File:用于指示日志文件名,日志文件名和位置值定义了SQL线程在哪个点中止执行
    Until_Log_Pos:用于指示日志位置值,日志文件名和位置值定义了SQL线程在哪个点中止执行
    Master_SSL_Allowed:如果允许对主服务器进行SSL连接,则值为Yes。如果不允许对主服务器进行SSL连接,则值为No。如果允许SSL连接,但是从属服务器没有让SSL支持被启用,则值为Ignored。
    Master_SSL_CA_File:master-ca选项的当前值
    Master_SSL_CA_Path:master-capath选项的当前值
    Master_SSL_Cert:master-cert选项的当前值
    Master_SSL_Cipher:master-cipher选项的当前值
    Master_SSL_Key:master-key选项的当前值
    Seconds_Behind_Master:本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已经过的秒数。当此线程被从属服务器I/O线程赶上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。如果主服务器和从属服务器之间的网络连接较快,则从属服务器I/O线程会非常接近主服务器,所以本字段能够十分近似地指示,从属服务器SQL线程比主服务器落后多少。如果网络较慢,则这种指示不准确;从属SQL线程经常会赶上读取速度较慢地从属服务器I/O线程,因此,Seconds_Behind_Master经常显示值为0。即使I/O线程落后于主服务器时,也是如此。换句话说,本列只对速度快的网络有用。即使主服务器和从属服务器不具有相同的时钟,时间差计算也会起作用(当从属服务器I/O线程启动时,计算时间差。并假定从此时以后,时间差保持不变)。如果从属SQL线程不运行,或者如果从属服务器I/O线程不运行或未与主服务器连接,则Seconds_Behind_Master为NULL(意义为“未知”)。举例说明,如果在重新连接之前,从属服务器I/O线程休眠了master-connect-retry秒,则显示NULL,因为从属服务器不知道主服务器正在做什么,也不能有把握地说落后多少。本字段有一个限制。时间标记通过复制被保留,这意味着,如果一个主服务器M1本身是一个从属服务器M0,则来自M1的binlog的任何事件(通过复制来自M0的binlog的事件而产生),与原事件具有相同的时间标记。这可以使MySQL成功地复制TIMESTAMP。但是,Seconds_Behind_Master的缺点是,如果M1也收到来自客户端的直接更新,则值会随机变化,因为有时最近的M1时间来自M0,有时来自直接更新,最近的时间标记也是如此。

  • mysql-master/slave同步问题:Slave_IO_Running: No

    2011-08-24 10:16:13

    配置mysql的master/slave时,经常会遇到Slave_IO_Running: No

    这时可通过以下方法来处理:

    方法一:(重置slave)

    slave stop;

    reset slave;

    slave start;


    方法二:(重设同步日志文件及位置)

    1、查看slave状态
    show slave status\G

                Master_Log_File: mysql-bin.000040
            Read_Master_Log_Pos: 4
                 Relay_Log_File: mysqld-relay-bin.000001
                  Relay_Log_Pos: 98
          Relay_Master_Log_File: mysql-bin.000040
               Slave_IO_Running: No
              Slave_SQL_Running: Yes

    目前已同步到mysql-bin.000040这个日志文件,98的位置;

    2、暂停slave
    slave stop;

    3、修改同步日志文件及位置;
    日志文件及位置都改小;(之前是同步正常,最近才出现问题的,一般改小一个值就好)
    如:
    change master to master_log_file='mysql-bin.000039', master_log_pos=1;

    4、启动slave
    slave start;

    5、再次确认slave状态
    show slave status\G
    这时会发现:
    Slave_IO_Running: Yes
    且下述两个值一直在不断变化中:
    Relay_Log_Pos: 998875
    Relay_Master_Log_File: mysql-bin.000048

    如果Slave_IO_Running: No,则继续第2、3、4步,把3步中的值再改小;如此反复。。。

     

     

  • mysql-忘记用户密码的解决方法

    2010-08-12 10:59:56

        介绍一个非常有用的mysql启动参数—— --skip-grant-tables。顾名思义,就是在启动mysql时不启动grant-tables,授权表。有什么用呢?当然是忘记管理员密码后有用。

    linux下操作:
        操作方法:
        1、杀掉原来进行着的mysql:
           service mysqld stop
           或者:
           kill -TERM mysqld
        2、以命令行参数启动mysql:
           /usr/bin/mysqld_safe --skip-grant-tables &
        3、修改管理员密码:
           use mysql;
           update user set password=password('yournewpasswordhere') where user='root';
           flush privileges;
           exit;
        4、杀死mysql,重启mysql

    如果你在my.cnf中的有添加“skip-grant-tables”,那么任何的帐号用任何的密码(当然也包括空)都可以登录到mysql数据库了。
     
     
    windows下操作:
        操作方法:
        1、修改my.ini
           在[mysqld]后面增加:skip-grant-tables
        2、重启mysql
        可到开始-程序-管理工具-服务,这里重启mysql
        3、修改管理员密码:
           use mysql;
           update user set password=password('yournewpasswordhere') where user='root';
           flush privileges;
           exit;
        4、重启mysql

     
  • mysql监控软件之mtop 详解-zt

    2010-01-15 13:02:07

    1.准备

    依赖文件:

    mysql 和 perl (这些普通服务器都有,不赘述了)
    perl-Curses : 下载地址--curses.tgz
    mtop安装包:mtop下载

    2. Curses的安装

    # tar zxvf Curses-x.xx.tar.gz
    # cd Curses*
    # perl Makefile.PL
    # make
    # make install
    这里make时可能会报错,需要对 Curses.c 275行做如下修改
    原:if (Perl_sv_isa(sv, "Curses::Window")) {
    改:if (sv_isa(sv, "Curses::Window")) {

    3. 安装mtop

    # tar zxvf mtop-0.6.6.tar.gz
    # cd mtop-0.6.6
    # perl Makefile.PL
    # make
    # make install
    4. 运行mtop

       这里可以选择单独为mtop创建一个有RELOAD,PROCESS,SUPER 权限的用户。
    mysql> GRANT RELOAD,PROCESS,SUPER ON *.* TO 'mtop'@'localhost' IDENTIFIED BY 'mtop';
    mysql> FLUSH PRIVILEGES;
       如果只是为了短暂的检测一下数据库,也可以直接使用mtop。
    > mtop --dbuser=root --password='xxx' --host=localhost --seconds=1

    5. mtop监控的精度

        由于mtop监控的原理是以seconds作为间隔进行一次 show process 操作,所以猜测:如果语句执行的时间小于1s就很难被mtop抓到。唯一的可能性就是,语句在执行过程中,正好mtop进行了刷新,这是能够抓到语句。
        从实际试验中我们也证明了这一猜测,普通的快速的select 语句的执行不会显现在mtop中。因此,我认为mtop适用于压力比较大,或者一段时间内会出现性能瓶颈时的监控。大并发,或者slow-query才容易被mtop抓下,从而用于mysql语句调优,瓶颈分析。

    6. mtop对服务器性能的影响

    由于mtop是以一定间隔不断的执行show processlist的语句,因此猜测:mtop会对mysql的执行性能有一定影响。以下用mysqlslap分别对 有mtop 和 没有mtop监控两种情况下的数据库性能进行测试:

    测试结果:

    测试参数;并发10,语句1000,循环5次
    mysqlslap -h localhost -uroot -p -a -i 5 -c 10 --create-schema=test --number-of-queries=1000


    2.056 seconds
    2.047 seconds

    测试参数;并发100,语句1000,循环5次
    mysqlslap -h localhost -uroot -p -a -i 5 -c 10 --create-schema=test --number-of-queries=1000


    4.462 seconds
    4.338 seconds

    结论:可见随着并发的增加,mtop对性能的影响也越为明显,10,50,100并发时,效率降低幅度分别为0.44%,0.65%,2% ; 结合之前所说的mtop使用的场景,可能mtop的使用会对服务器带来一定压力。需要引起注意。

    7. 总结

    简单的说mtop就是一个quick view of mysql connections。但是,应用的场景较少,并且会对服务器带来一小部分压力。
    总结一下应用场景:

    a. 快速的对mysql连接情况进行了解
    b. 短时间的mysql连接情况的监控
    c. 数据库瓶颈分析的初步定为
    缺点:
    a. 精度低,不能抓到所有process。
    b. 在大并发时,对数据库有小幅压力。
    c. 会不断增加数据库QUERIES的数值,对今后的数据库数据分析会带来一定影响。
    d. 安装有些许麻烦。

    文章出处:DIY部落

  • mysql导入数据乱码问题记录

    2009-07-22 17:34:58

    今天在linux下导了很多次的mysql数据一直出错

    经指导最终解决问题

    数据库使用UTF8编码,导入文件是开发提供的
    不同的文件,有的导入正常,有的导入显示乱码

    最后才知道,原来文件格式不正确导致

    开发提供的文件,有的是ANSI格式,有的是UTF8格式,UTF8格式的导入后能正常显示;

    解决方法:
    1、在WINDOWS下把文件另存为,选择格式为UTF8;
    2、传到LINUX后,再用VI编辑,第一行通常会有一些乱码或显示为?;把这些乱码删除,补上正确的字符;(通常就几个字符)
    3、上面步骤操作后,再进行导入操作,全部正常!

     

     

  • linux下手动安装mysql

    2009-06-03 09:45:31

    linux下手动安装mysql

    先增加一个用户来跑mysql
    # groupadd mysql
    # useradd -g mysql mysql
    # passwd mysql
    # tar xzvf mysql-VERSION.tar.gz
    # cd mysql-VERSION


    配置
    # ./configure --prefix=/usr/local/mysql --enable-thread-safe-client --without-debug --with-extra-charsets=gbk --with-extra-charsets=all


    编译
    # make


    安装
    # make install
    # scripts/mysql_install_db

    # chown -R root  /usr/local/mysql;     
    # chown -R mysql /usr/local/mysql/var;       
    # chgrp -R mysql /usr/local/mysql
    # cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

    # /usr/local/mysql/bin/mysqladmin -u root password 'Zzy01Test'

    启动mysql
    /usr/local/mysql/share/mysql/mysql.server start
    /usr/local/mysql/share/mysql/mysql.server stop

    /usr/local/mysql/bin/mysqld_safe &

  • sql中单引号的问题

    2009-04-07 09:38:31

    sql中单引号的问题

    如果插入一条记录,记录值中包含了单引号,那么应该怎么处理?

    比如说 insert into a values ('ab'c');
    这种写法肯定有问题。

    那么insert into a values ("ab'c");也是不对。

    真正有用的是:
    insert into a values ('ab''c');
    这里用两个单引号表示一个。

  • 对MYSQL的auto_increment字段插入0值

    2009-02-24 11:01:00

    下述方法是通过mysql的mode值(NO_AUTO_VALUE_ON_ZERO)来实现的

    注:设置SESSION变量只影响当前的客户端。任何客户端可以随时更改自己的会话 sql_mode值。

    示例:

    mysql>use testdb;
    mysql>SET sql_mode='NO_AUTO_VALUE_ON_ZERO';
    mysql>create table test(
        ->id int not null auto_increment,
        ->w1 char(4) not null default '',
        ->primary key (id)
        ->);
    mysql>insert into test values (1,"abcd");
    mysql>select * from test;
    +----+-------+
    | id | w1    |
    +----+-------+
    |  1 | abcd  |
    +----+-------+
    mysql>insert into test values (0,"efgh");
    mysql>select * from test;
    +----+-------+
    | id | w1    |
    +----+-------+
    |  0 | efgh  |
    +----+-------+
    |  1 | abcd  |
    +----+-------+
    mysql>select @@sql_mode;
    +-----------------------+
    | @@sql_mode            |
    +-----------------------+
    | NO_AUTO_VALUE_ON_ZERO |
    +-----------------------+

  • MySQL常用命令及基本操作总结-zt

    2009-02-24 10:20:54

    MySQL常用命令及基本操作总结
     

    MySQL常用操作基本操作,以下都是MySQL5.0下测试通过首先说明下,记住在每个命令结束时加上;(分号)
    1.
    导出整个数据库
    mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)
    mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
    2.
    导出一个表
    mysqldump -u
    用户名 -p 数据库名 表名> 导出的文件名
    mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
    3.
    导出一个数据库结构
    mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
    -d
    没有数据 –add-drop-table 在每个create语句之前增加一个drop table
    4.
    导入数据库
    常用source 命令
    进入mysql数据库控制台,
    mysql -u root -p
    mysql>use
    数据库
    然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
    mysql>source d:wcnc_db.sql

    一、启动与退出
    1、进入MySQL:启动MySQL Command Line ClientMySQLDOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
    2
    、退出MySQLquitexit
    二、库操作
    1、、创建数据库
    命令:create database <数据库名>
    例如:建立一个名为xhkdb的数据库
    mysql> create database xhkdb;
    2
    、显示所有的数据库
    命令:show databases (注意:最后有个s
    mysql> show databases;
    3
    、删除数据库
    命令:drop database <数据库名>
    例如:删除名为 xhkdb的数据库
    mysql> drop database xhkdb;
    4
    、连接数据库
    命令: use <数据库名>
    例如:如果xhkdb数据库存在,尝试存取它:
    mysql> use xhkdb;
    屏幕提示:Database changed
    5
    、当前选择(连接)的数据库
    mysql> select database();

    6、当前数据库包含的表信息:
    mysql> show tables;
    (注意:最后有个s

    三、表操作,操作之前应连接某个数据库
    1
    、建表
    命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

    mysql> create table MyClass(
    > id int(4) not null primary key auto_increment,
    > name char(20) not null,
    > sex int(4) not null default '0',
    > degree double(16,2));
    2
    、获取表结构
    命令: desc 表名,或者show columns from 表名
    mysql>
    DESCRIBE  MyClass
    mysql> desc MyClass;
    mysql> show columns from MyClass;
    3
    、删除表
    命令:drop table <表名>
    例如:删除表名为 MyClass 的表
    mysql> drop table MyClass;
    4
    、插入数据
    命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 1 )[, ( n )]
    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5.
    mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);
    5
    、查询表中的数据
    1)
    、查询所有行
    命令: select <字段1,字段2...> from < 表名 > where < 表达式 >
    例如:查看表 MyClass 中所有数据
    mysql> select * from MyClass;
    2
    )、查询前几行数据
    例如:查看表 MyClass 中前2行数据
    mysql> select * from MyClass order by id limit 0,2;
    6
    、删除表中数据
    命令:delete from 表名 where 表达式
    例如:删除表 MyClass中编号为1 的记录
    mysql> delete from MyClass where id=1;
    7
    、修改表中数据:update 表名 set 字段=新值,… where 条件
    mysql> update MyClass set name='Mary' where id=1;
    7
    、在表中增加字段:

    命令:alter table 表名 add字段 类型 其他;
    例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
    mysql> alter table MyClass add passtest int(4) default '0'
    8
    、更改表名:
    命令:rename table 原表名 to 新表名;
    例如:在表MyClass名字更改为YouClass
    mysql> rename table MyClass to YouClass;


    更新字段内容
    update
    表名 set 字段名 = 新内容
    update
    表名 set 字段名 = replace(字段名,'旧内容','新内容');

    文章前面加入4个空格
    update article set content=concat('
      ',content);

    字段类型
    1INT[(M)] 型: 正常大小整数类型
    2
    DOUBLE[(M,D)] [ZEROFILL] 型: 正常大小(双精密)浮点数字类型
    3
    DATE 日期类型:支持的范围是1000-01-019999-12-31MySQLYYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE
    4
    CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
    5
    BLOB TEXT类型,最大长度为65535(2^16-1)个字符。
    6
    VARCHAR型:变长字符串类型

    mysql怎么定义外键

    建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

    外键作用: 使两张表形成关联,外键只能引用外表中的列的值!

    指定主键关键字: foreign key(列名)

    引用外键关键字: references <外键表名>(外键列名)

    事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

    例如:

    outTable表 主键 id 类型 int

    创建含有外键的表:
    create table temp(
    id int,
    name char(20),
    foreign key(id) references outTable(id) on delete cascade on update cascade);

    说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

    5.导入数据库表  
       1)创建.sql文件
       2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
       2)导入auction.sql文件
       c:mysqlbin>mysql -u root -p auction < auction.sql
       通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction
       6.修改数据库
       1)在mysql的表中增加字段:
       alter table dbname add column userid int(11) not null primary key auto_increment;
       这样,就在表dbname中添加了一个字段userid,类型为int(11)
       7mysql数据库的授权
       mysql>grant select,insert,delete,create,drop
       on *.* (test.*/user.*/..)
       to 用户名@localhost
       identified by '密码'
       如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:
       mysql> grant usage
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.15 sec)
       此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:
       mysql> GRANT select, insert, delete,update
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.00 sec)
       此操作使testuser能够在每一个test数据库中的表执行SELECTINSERTDELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:
       mysql> exit
       Bye9!

  • mysql-开启慢查询&所有操作记录日志

    2009-01-09 11:54:21

    在运营网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询,找到影响效率的 SQL ,然后采取相应的措施。下面介绍一下如何开启慢查询:

    1、开启慢查询

    找到 MySQL 的配置文件 ,my.cnf (Windows 为 my.ini ),在 [mysqld]下增加下面几行:

    long_query_time=2
    log-slow-queries= /usr/var/slowquery.log


    上面的 2 是查询的时间,即当一条 SQL 执行时间超过2秒的时候才记录,/usr/var/slowquery.log 是日志记录的位置。

    然后重新启动MySQL服务

    注意,mysql 5.6版本,记录慢查询日志的配置方式有修改为:

    long_query_time=2
    slow_query_log=1
    slow_query_log_file=/tmp/slow-query.log

    另外,可配置记录没有使用索引的查询日志:
    log_queries_not_using_indexes=1 


    2、 MySQL 配置文件的位置

    Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下。

    Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下。

     

    注:可通过mysql>show full processlist;来查看当前mysql的连接进程;

     

    3、要记录所有操作日志,包括select

    在my.ini或my.cnf配置文件,[mysqld]中增加:log=文件名

    例:log=/tmp/mysqlquery.log

    重启mysqld,即会把所有相关操作日志都记录下来

    注意:log记录的位置,mysql要有写权限;

    注意,mysql 5.6版本,记录所有操作日志的配置方式有修改为:

    general_log=on
    general_log_file=/tmp/mysqlquery.log


211/212>
Open Toolbar