zoukankan      html  css  js  c++  java
  • MYSQL复习笔记2-自带工具介绍

    Date: 20140102
    Auth: Jin

    一、mysql 命令行客户端
    1)base
    -h host
    -P port
    --socket=path,-S path用于连接的套接字文件替换使用IP PORT连接
    -u username
    -p password
    ---database=db_name,-D db_name 连接数据库
    --default-character-set=charset client字符集
    --execute=statement, -e statement 执行语句
    --prompt=name Set the mysql prompt to this value.
    --local-infile[={0|1}] 为LOAD DATA INFILE启用或禁用LOCAL功能。
    --tee=file_name  记录client操作日志,可以用于path或者大批量部署

    2)进入命令行后
    mysql> help
    在mysql常用
    (1)设置字符集
    mysql> charset utf8
    (2)调用shell命令,类似vim中:shell
    system
    Usage: ! shell-command
    mysql> ! ls
    (3)查看状态
    mysql> status
    (4)开启关闭警告
    warnings (W) Show warnings after every statement.
    nowarning (w) Don't show warnings after every statement.
    (5)执行文件中的sql source
    Usage: . <filename> | source <filename>

    3)设置提示符
    --prompt=name
    (1)可以用MYSQL_PS1环境变量来设置提示字符串
    export MYSQL_PS1="(u@h) [d]> "
    (2)mysql配置文件中设置
    [client]
    prompt=\u@\h:[\d] \r:\m:\s>
    显示效果
    root@localhost:[test] 08:47:52>
    (3)交互式
    可以使用prompt(或R)命令交互地更改提示
    prompt (u@h) [d]>

    4)mysql技巧
    (1) 垂直显示查询结果
    mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1G
    (2)使用--safe-updates选项
    不允许你执行UPDATE或DELETE语句,除非在WHERE子句中指定一个键值约束或提供一个LIMIT子句(或二者皆使用)。
    所有大的SELECT结果自动限制到1,000行,除非语句包括一个LIMIT子句
    放弃可能需要检查1,000,000多行组合的多表SELECT语句

    二、mysqladmin:用于管理MySQL服务器的客户端
    基本连接数据的参数同mysql,
    --default-character-set=name是设置数据库的默认字符集
    # mysqladmin --help
    分类记忆一下
    1)操作数据库
    mysqladmin create DataBase
    创建数据库
    mysqladmin drop DataBase
    删除数据库
    2)显示状态和变量
    mysqladmin status
    Uptime: 3263 Threads: 1 Questions: 107 Slow queries: 0 Opens: 34 Flush tables: 1 Open tables: 27 Queries per second avg: 0.032
    已经运行的秒数:活动线程数目 查询数目 慢查询的数量 打开的数据库表的数量 打开的表的数量 每个语句执行的时间
    Flush tables flush refresh和reload命令的数量
    Memory in use
    mysqld代码直接分配的内存数量。只有用--with--debug=full编译了MySQL该值才显示。
    Maximum memory used
    mysqld代码直接分配的最大内存数量。只有用--with--debug=full编译了MySQL该值才显示。
    简单状态
    mysqladmin extended-status
    详细状态
    mysqladmin variable
    详细变量
    3)密码管理
    mysqladmin password [new-password]
    设置新密码
    mysqladmin old-password [new-password]
    类似password但使用旧的(pre-4.1)密码哈希格式保存 密码
    # mysqladmin variables -p163.com |grep password
    | old_passwords | OFF
    4)线程管理
    mysqladmin processlist
    查看线程
    mysqladmin kill id,id,...
    杀掉线程
    5)监控服务是否存活
    mysqladmin ping
    6) 刷新
    mysqladmin reload
    mysqladmin flush-privileges
    刷新权限
    flush-hosts Flush all cached hosts
    flush-logs Flush all logs #刷新LOG
    flush-status Clear status variables
    flush-tables Flush all tables
    flush-threads Flush the thread cache
    7)关闭服务器,启动主从
    mysqladmin shutdown Take server down
    mysqladmin start-slave Start slave 要作为slave才能运行
    mysqladmin stop-slave Stop slave 要作为slave才能运行

    三、mysqldump
    1)、备份数据操作
    (1)、导出所有数据库 --all--database,-A
    mysqldump --all-database > 导出的文件名
    mysqldump --all-database > /data/backup/db/alldb_bak.sql
    (2)、导出单个数据库 --databases, -B
    mysqldump 数据库名 > 导出的文件名
    mysqldump -u root -p zabbix > /data/backup/db/zabbix_bak.sql
    (3)、导出多个数据库 --databases, -B
    mysqldump --database 数据库1 数据库2 > 导出的文件名
    mysqldump --database zabbix mysql > /data/backup/db/two_db_bak.sql
    (4)、压缩备份
    直接将MySQL数据库压缩备份
    mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

    注意:在做主从dump数据加上--master-data,也就是--master-data=1

    mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,
    file和position记录的位置就是slave从master端复制文件的起始位置。SLAVE只需要start slave即可
    man里有介绍

    2)导出一个数据库结构 --no-data, -d
    (1)、基本操作
    mysqldump -–no-data -–databases databasename1 databasename2 > structurebackupfile.sql
    (2)增加创建数据库结构前的删除操作
    --add-drop-database 在每个CREATE DATABASE语句前添加DROP DATABASE语句。貌似没有
    --add-drop-table 在每个CREATE TABLE语句前添加DROP TABLE语句。 默认。反选项--skip-add-drop-table
    --add-drop-trigger
    mysqldump -u root -p -d --add-drop-table zabbix > /data/backup/db/zabbix_sche.sql

    3)、不锁表备份
    Mysqldump备份要锁表,不锁表备份的办法
    加上--lock-tables=false参数,如果是innodb,则加上--single-transcation

    4)、默认选项和反选项
    默认选项 --opt
    Use of --opt is the same as specifying --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert,
    --lock-tables, --quick, and --set-charset. All of the options that --opt stands for also are on by default because --opt is on by
    default
    --compact 选项
    Use of --compact is the same as specifying --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, and
    --skip-set-charset options.
    产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking选项
    --opt反选项 --skip-opt
    To reverse --opt for all features except index disabling and table locking, use --skip-opt --disable-keys --lock-tables.
    --tables
    覆盖---database或-B选项。选项后面的所有参量被看作表名。

    5) -R 导出存储过程


    四、mysqlimport
    load data infile的封装
    将特定格式的文本数据导入指定的MYSQL,比如标准的CSV文件。
    从来没用过,outfile和load data infile到用过。
    没有分割符
    mysql> select * from users into outfile '/tmp/zabbix_users_bak.txt';
    mysql> load data infile '/tmp/zabbix_users_bak.txt' into table users;
    有分割符
    mysql> select * from users into outfile '/tmp/zabbix_users_bak1.txt' FIELDS TERMINATED BY ',';
    mysql> load data infile '/tmp/zabbix_users_bak1.txt' into table users FIELDS TERMINATED BY ',';


    五、mysqlcheck
    1、基本描述
    mysqlcheck的功能类似myisamchk,但其工作不同。主要差别是当mysqld服务器在运行时必须使用mysqlcheck,
    而myisamchk应用于服务器没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。使用myisamchk修复失败是不可逆的。
    Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。
    它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。
    并不是所有存储引擎都支持CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABL,比如innoDB不支持REPAIR.
    CHECK TABLE、检查
    REPAIR TABLE、修复
    ANALYZE TABLE、分析
    OPTIMIZE TABL 优化

    有3种方式来调用mysqlcheck:
    shell> mysqlcheck[options] db_name [tables]
    shell> mysqlcheck[options] ---database DB1 [DB2 DB3...]
    shell> mysqlcheck[options] --all--database

    如果没有指定任何表或使用---database或--all--database选项,则检查整个数据库。
    下面的名可用来更改mysqlcheck的默认行为:
    mysqlrepair
    默认选项为--repair

    mysqlanalyze
    默认选项为--analyze

    mysqloptimize
    默认选项为--optimize
    -B, --databases

    2、自己实践
    1) 检查表
    -c, --check Check table for errors.
    -C, --check-only-changed
    Check only tables that have changed since last check or
    haven't been closed properly.
    [root@mnt ~]# mysqlcheck -c --database mysql
    mysql.columns_priv OK
    mysql.db OK
    mysql.event OK
    mysql.func OK
    mysql.general_log
    Error : You can't use locks with log tables.
    status : OK
    mysql.help_category OK

    [root@mnt ~]# mysqlcheck -C --database mysql
    mysql.columns_priv Table is already up to date
    mysql.db Table is already up to date
    mysql.event Table is already up to date
    mysql.func Table is already up to date
    mysql.general_log
    Error : You can't use locks with log tables.
    status : OK
    mysql.help_category Table is already up to date

    2)分析表
    -a, --analyze Analyze given tables.
    [root@mnt ~]# mysqlcheck -a -B mysql
    mysql.columns_priv Table is already up to date
    mysql.db Table is already up to date
    mysql.event Table is already up to date
    mysql.func Table is already up to date
    mysql.general_log
    note : The storage engine for the table doesn't support analyze

    3)优化
    -o, --optimize Optimize table.
    [root@mnt ~]# mysqlcheck -o -B mysql
    mysql.columns_priv Table is already up to date
    mysql.db Table is already up to date
    mysql.event Table is already up to date
    mysql.func Table is already up to date
    mysql.general_log
    note : The storage engine for the table doesn't support optimize
    4)修复表
    [root@mnt ~]# mysqlcheck -r -B mysql
    mysql.columns_priv OK
    mysql.db OK
    mysql.event OK
    mysql.func OK
    mysql.general_log OK
    mysql.help_category OK
    mysql.help_keyword OK
    mysql.help_relation OK
    mysql.help_topic OK
    mysql.host OK
    mysql.ndb_binlog_index OK
    mysql.plugin OK
    mysql.proc OK
    mysql.procs_priv OK
    mysql.proxies_priv OK
    mysql.servers OK
    mysql.slow_log OK
    mysql.tables_priv OK
    mysql.time_zone OK
    mysql.time_zone_leap_second OK
    mysql.time_zone_name OK
    mysql.time_zone_transition OK
    mysql.time_zone_transition_type OK
    mysql.user OK


    六、 mysqldumpslow
    主要功能
    1、打开slowlog
    long_query_time = 2
    slow-query-log-file = /data/logs/mysql/3306_slow.log
    log-queries-not-using-indexes #log没有使用索引的query。

    2、分析slowlog
    # mysqldumpslow --help

    -s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default 是表示按照何种方式排序, 默认at

    al: average lock time 平均锁定时间
    ar: average rows sent 平均返回记录数
    at: average query time 平均执行时间
    c: count c 记录次数
    l: lock time 锁时间
    r: rows sent 返回的记录数来排序,
    t: query time 时间
    -r reverse the sort order (largest last instead of first) 倒序从最后开始显示
    -t NUM just show the top n queries #显示头n条记录
    -a don't abstract all numbers to N and strings to 'S'
    -n NUM abstract numbers with at least n digits within names
    -g PATTERN grep: only consider stmts that include this string #后边可以写一个正则匹配模式,大小写不敏感的。
    -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
    default is '*', i.e. match all
    -i NAME name of server instance (if using mysql.server startup script)
    -l don't subtract lock time from total time

    实例
    /path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
    得到返回记录集最多的10个查询。
    /path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
    得到按照时间排序的前10条里面含有左连接的查询语句。

    记忆部分

    -s, 是表示按照何种方式排序,
    c 记录次数
    t 查询时间
    l 锁时间
    r 返回的记录数来排序,
    at 平均执行时间
    al 平均锁定时间
    默认 at
    -t, 是top n的意思,即为返回前面多少条的数据;

    mysqldumpslow -s at -t 10 /database/mysql/slow-log


    七、mysqlbinglog
    主要功能分析MySQL Server所产生的二进制日志。当希望通过备份的binlog做一些指定时间之类的恢复时,mysqlbinlog可以帮助我们找出恢复操作要做哪些事情。
    1、打开binlog
    log-bin=mysql-bin
    log-bin = binlogs/mysql-bin 文件存放目录前缀
    binlog_format = ROW #格式
    #binlog_format=mixed
    expire_logs_day=1 #过期时间 超过手动清除
    max_binlog_size=700M #每个文件大小
    log-bin-index[=file_name] #二进制日志索引文件的文件名。当mysqld在运行时,不应手动编辑该文件
    binlog_cache_size=3M
    对非事务表的更新执行完毕后立即保存到二进制日志中。对于事务表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT) 被缓存起来,直到服务器接收到COMMIT语句。


    2、分析binlog
    [root@mnt mysql]# mysqlbinlog mysql-bin.000003

    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #140101 17:40:02 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.71-log created 140101 17:40:02 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    BINLOG '
    cuLDUg8BAAAAZgAAAGoAAAABAAQANS4xLjcxLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAABy4sNSEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
    '/*!*/;
    # at 106
    #140101 17:43:02 server id 1 end_log_pos 193 Query thread_id=3 exec_time=0 error_code=0
    SET TIMESTAMP=1388569382/*!*/;
    SET @@session.pseudo_thread_id=3/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=0/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C latin1 *//*!*/;
    SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    create database dbtest
    /*!*/;
    # at 193
    #140101 17:44:39 server id 1 end_log_pos 356 Query thread_id=3 exec_time=0 error_code=0
    use `dbtest`/*!*/;
    SET TIMESTAMP=1388569479/*!*/;
    create table tab1( id int(11) not null auto_increment, name varchar(25) not null,primary key(id) )
    /*!*/;
    # at 356
    #140101 17:51:02 server id 1 end_log_pos 426 Query thread_id=6 exec_time=0 error_code=0
    SET TIMESTAMP=1388569862/*!*/;
    BEGIN
    /*!*/;
    # at 426
    #140101 17:51:02 server id 1 end_log_pos 454 Intvar
    SET INSERT_ID=1/*!*/;
    # at 454
    #140101 17:51:02 server id 1 end_log_pos 567 Query thread_id=6 exec_time=0 error_code=0
    SET TIMESTAMP=1388569862/*!*/;
    insert into tab1(name) values ('diege'),('lily')
    /*!*/;
    # at 567
    #140101 17:51:02 server id 1 end_log_pos 594 Xid = 81
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

    我做的创建表,插入数据操作都记录进去了。

    不是直接可读的SQL语句时

    BINLOG '
    HxWdVBMlgQAASwAAAAIBAAAAADAAAAAAAAEABGdhbWUADnRiX21zZ19oaXN0b3J5AA4IAQwCCAgP
    DwEBDwEPDAiWAFgC3AXcBdg8
    HxWdVBclgQAApAAAAKYBAAAAADAAAAAAAAEADv//CNBtBgAAAAAAAAW6GpJ+URIAAAEAAAAAAAAA
    qQ8AAAAAAAAM55m75b2V5aWW5YqxKADntK/orqHnmbvlvZUz5aSp77yM6I635b6X55u45bqU5aWW
    5Yqx44CCAQAfAFt7J2l0ZW1JZCc6MzEsJ2l0ZW1BbW91bnQnOjUwfV0B+VyhflESAAA=

    # mysqlbinlog --base64-output=decode-rows -v  mysql-bin.000011 


    3、通过binlog恢复数据
    在备份恢复专题会详细做这方面的测试

  • 相关阅读:
    【BZOJ3261】— 最大异或和(可持久化0/1Trie)
    【ZJOI2007】—捉迷藏(动态点分治)
    【HNOI2010】-城市建设(动态最小生成树)
    【BOI2007】Mokia 摩基亚
    【BZOJ 3262】-陌上花开(CDQ分治+树状数组)
    Win64 驱动内核编程-24.64位驱动里内嵌汇编
    Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
    Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
    Win64 驱动内核编程-22.SHADOW SSDT HOOK(宋孖健)
    Win64 驱动内核编程-22.SHADOW SSDT HOOK(宋孖健)
  • 原文地址:https://www.cnblogs.com/diege/p/3538295.html
Copyright © 2011-2022 走看看