• [svc]mysql备份恢复及常用命令


    如何实现mysql读写分离

    1.通过程序实现读写分类(性能 效率最佳)
    php和java都可以通过设置多个连接文件轻松实现对db的读写分离,即当select时,就去连读库的连接文件,当update,insert,delete时就去连写库的连接文件.
    2.mysql-proxy, amoeba等代理软件也可以实现读写分离
    3.开发dbproxy

    主从同步原理

    是异步的,逻辑的

    主库
    必须开启binlog
    io线程
    从库
    io线程
    sql线程

    master: ip port user/pass bin-file bin-position

    1.从库2个线程,主库1个线程
    2.ip port user/pass bin-file bin-position
    3.开启开关前,确保主从库基于某个位置点以前一致.
    4.master建立同步账号
    5.start salve

    建库建表

    create database people;
    use people;
    create table p1 (id int,name char(40));
    insert into p1 values(1,'maotai');
    insert into p1 values(2,'毛台');
    insert into p1 values(3,'maomao');
    insert into p1 values(4,'毛毛');
    

    备份数据库

    mysqldump -uroot -p123456 people > /opt/people_bak.sql
    
    egrep -v "#|*|--|^$" /opt/people_bak.sql
    
    [root@n1 ~]# egrep -v "#|*|--|^$" /opt/people_bak.sql
    DROP TABLE IF EXISTS `p1`;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    LOCK TABLES `p1` WRITE;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    UNLOCK TABLES;
    

    注: 从上面看到,

    • LOCK TABLES插数据时候,锁表了,禁止其他修改.
    • insert语句整合成了一条
    • 导出的都是一些sql语句

    http://www.cnblogs.com/iiiiiher/p/8205915.html

    SET NAMES 'latin1'; 
    SET character_set_client = latin1;
    SET character_set_connection = latin1;
    SET character_set_database = latin1;
    SET character_set_results = latin1;
    SET character_set_server = latin1;
    SET character_set_system = latin1;
    

    删表后恢复

    [root@n1 etc]# mysql -uroot -p123456 -e 'use people;drop table p1';
    [root@n1 etc]# mysql -uroot -p123456 people < /opt/people_bak.sql
    
    - 不加-B
    [root@n1 ~]# mysqldump -uroot -p123456 people > /opt/people_bak.sql
    [root@n1 ~]# egrep -v "#|*|--|^$" /opt/people_bak.sql
    DROP TABLE IF EXISTS `p1`;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    LOCK TABLES `p1` WRITE;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    UNLOCK TABLES;
    
    
    
    - 加上-B多了: USE `people`;
    [root@n1 ~]# mysqldump -uroot -p123456 -B people > /opt/people_bak_B.sql
    
    [root@n1 ~]# egrep -v "#|*|--|^$" /opt/people_bak_B.sql
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `people` /*!40100 DEFAULT CHARACTER SET utf8 */;
    USE `people`;
    DROP TABLE IF EXISTS `p1`;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    LOCK TABLES `p1` WRITE;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    UNLOCK TABLES;
    
    
    - 导入时候不用指定库了.
    [root@n1 etc]# mysql -uroot -p123456 -e 'drop database people;
    [root@n1 etc]# mysql -uroot -p123456 < /opt/people_bak.sql
    
    -B: 
    - sql多了建库语句和use语句
    - 指定多个库备份
    

    --compact debug时候用,忽略了一些东西.

    [root@n1 ~]# mysqldump -uroot -p123456 -B --compact people
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `people` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    USE `people`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    

    gzip压缩

    [root@n1 ~]# mysqldump -uroot -p123456 -B people|gzip > /opt/people_bak_B.sql.gz
    
    [root@n1 ~]# ls -lh /opt/people_bak_B.sql.gz /opt/people_bak.sql 
    -rw-r--r-- 1 root root  761 Mar 20 20:20 /opt/people_bak_B.sql.gz
    -rw-r--r-- 1 root root 1.9K Mar 20 20:08 /opt/people_bak.sql
    

    小结: 备份库时
    -B
    gzip 压缩

    mysqldump原理

    将db里的数据,以sql语句的形式导出.
    恢复过程: 即将sql语句重新执行的一个过程.

    -B备份同时多个库

    create database people2;
    use people;
    create table p1 (id int,name char(40));
    insert into p1 values(1,'maotai');
    insert into p1 values(2,'毛台');
    insert into p1 values(3,'maomao');
    insert into p1 values(4,'毛毛');
    
    - 同时备份多个库
    mysqldump -uroot -p123456 -B people people2 > /opt/people_bak_multi.sql
    
    
    - 恢复
    mysql -uroot -p123456 -e 'drop database people;drop database people2';
    mysql -uroot -p123456 < /opt/people_bak_multi.sql
    

    分库备份

    mysqldump -uroot -p123456 -B people > /opt/people_bak_B.sql
    mysqldump -uroot -p123456 -B people2 > /opt/people2_bak_B.sql
    
    [root@n1 etc]# mysql -uroot -p123456  -e 'show databases'|grep -Evi "database|infor|mysql|per|sys"|sed  's#^#mysqldump -uroot -p123456 -B #g'
    mysqldump -uroot -p123456 -B people
    mysqldump -uroot -p123456 -B people2
    

    方法1: sed后向引用

    [root@n1 etc]# mysql -uroot -p123456  -e 'show databases'|grep -Evi "database|infor|mysql|per|sys"|sed -r 's#^([a-z].*)#mysqldump -uroot -p123456 -B 1|gzip > /opt/1.gz #g'
    mysqldump -uroot -p123456 -B people|gzip > /opt/people.gz 
    mysqldump -uroot -p123456 -B people2|gzip > /opt/people2.gz
    
    mysql -uroot -p123456  -e 'show databases'|grep -Evi "database|infor|mysql|per|sys"|sed -r 's#^([a-z].*)#mysqldump -uroot -p123456 -B --events 1|gzip > /opt/1.gz #g'|bash
    

    方法2: for循环
    http://edu.51cto.com/course/808.html

    mkdir /sql/
    for dbname in `mysql -uroot -p123456  -e 'show databases'|grep -Evi "database|infor|mysql|per|sys"`;do
        mysqldump -uroot -p123456 -B --events ${dbname}|gzip > /sql/${dbname}_sql.gz
    done
    

    分库的意义: 恢复某个库时候有优势.

    备份单个表

    mysqldump -u 用户名 -p 数据库库名 表名 > 备份的文件名
    
    mysqldump -uroot -p123456 people p1 > /opt/people_p1_bak_B.sql
    

    创建两张表

    create database people;
    use people;
    create table p1 (id int,name char(40));
    insert into p1 values(1,'maotai');
    insert into p1 values(2,'毛台');
    insert into p1 values(3,'maomao');
    insert into p1 values(4,'毛毛');
    
    
    create table p2 (id int,name char(40));
    insert into p2 values(1,'maotai');
    insert into p2 values(2,'毛台');
    insert into p2 values(3,'maomao');
    insert into p2 values(4,'毛毛');
    
    mysqldump -uroot -p123456 --compact people p1 
    
    
    [root@n1 ~]# mysqldump -uroot -p123456 --compact people p1;
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    

    备份多个表

    mysqldump -u 用户名 -p 数据库库名 表1 表2 > 备份的文件名
    
    mysqldump -uroot -p123456 people --compact p1 p2 --compact
    
    [root@n1 ~]# mysqldump -uroot -p123456 people --compact p1 p2 --compact
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p2` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p2` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    
    

    企业需求: 仅恢复某个表,上述方法不适合.

    mysqldump -uroot -p123456 people --compact p1 --compact
    mysqldump -uroot -p123456 people --compact p2 --compact
    

    两个for循环,解决分库分表备份

    db_list=`mysql -uroot -p123456 -e 'show databases'|grep -Evi "database|infor|mysql|perfo|sys"`
    for dbname in $db_list;do
        tb_list=`mysql -uroot -p123456 -e "use ${dbname};show tables;"|grep -Evi 'Tabl'`
        for tbname in ${tb_list};do
            mysqldump -uroot -p123456 ${dbname} ${tbname}|gzip > /sql/${dbname}_${tbname}_bak.sql.gz
        done
    done
    

    生产情况:
    1.一个整备+一个分库分表备份.
    2.脚本恢复

    -d仅备份表结构

    - 加上-d即备份表结构
    
    mysqldump -uroot -p123456 --compact -d people2
    
    [root@n1 sql]# mysqldump -uroot -p123456 --compact -d people2
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p2` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    

    -t仅备份数据

    mysqldump -uroot -p123456 --compact -t people2
    
    [root@n1 sql]# mysqldump -uroot -p123456 --compact -t people2
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    INSERT INTO `p2` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    
    

    -A备份db里所有库

    mysqldump -uroot -p'123456' -A -B |gzip > /opt/all.sql.gz
    

    -F刷新binlog(重新生成一个新的binlog)

    打开binlog

    log-bin = mysql-bin 
    
    [root@n1 mysql]# ll /usr/local/mysql/data/
    total 122972
    ....
    -rw-r----- 1 mysql mysql      154 Mar 20 21:16 mysql-bin.000001
    -rw-r----- 1 mysql mysql       19 Mar 20 21:16 mysql-bin.index
    
    mysqldump -uroot -p'123456' -A -B --events -F|gzip > /opt/all.sql.gz
    
    [root@n1 mysql]# ll /usr/local/mysql/data/
    total 122984
    ...
    -rw-r----- 1 mysql mysql      201 Mar 20 21:16 mysql-bin.000001
    -rw-r----- 1 mysql mysql      201 Mar 20 21:16 mysql-bin.000002
    -rw-r----- 1 mysql mysql      201 Mar 20 21:16 mysql-bin.000003
    -rw-r----- 1 mysql mysql      154 Mar 20 21:16 mysql-bin.000004
    -rw-r----- 1 mysql mysql       76 Mar 20 21:16 mysql-bin.index
    
    

    全备份+增量备份,-F为了找准确备份点.

    --master-data=1(不带注释): 自动加了binlog和位置点.

    主从同步时候有用,可以保证不刷新binlog找到全备的位置点.

    [root@n1 mysql]# mysqldump -uroot -p123456 --master-data=1 --compact people
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154;    ## 自动加了binlog和位置点.
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p2` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p2` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    
    
    [root@n1 data]# mysqlbinlog mysql-bin.000002
    mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
    

    解决:
    注释掉

    [client]
    #default-character-set = utf8
    重启mysql即可
    
    - 位置点: 一般是当时的文件大小
    - 时间
    全备后,按照这个时间点增量同步
    
    
    [root@n1 data]# mysqlbinlog ./mysql-bin.000004
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #180320 21:16:59 server id 1  end_log_pos 123 CRC32 0x8bd89c27 	Start: binlog v 4, server v 5.7.17-log created 180320 21:16:59
    BINLOG '
    ywmxWg8BAAAAdwAAAHsAAAAAAAQANS43LjE3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    ASec2Is=
    '/*!*/;
    # at 123
    #180320 21:16:59 server id 1  end_log_pos 154 CRC32 0x3dd3cd98 	Previous-GTIDs
    # [empty]
    # at 154
    #180320 21:26:14 server id 1  end_log_pos 177 CRC32 0xf878c05e 	Stop
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    
    

    --master-data=2带注释

    [root@n1 data]# mysqldump -uroot -p123456 --master-data=2 --compact people
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=154;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p1` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p1` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛'),(1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `p2` (
      `id` int(11) DEFAULT NULL,
      `name` char(40) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    INSERT INTO `p2` VALUES (1,'maotai'),(2,'毛台'),(3,'maomao'),(4,'毛毛');
    
    

    mysqldump关键参数小结

    mysqldump --help
    
    参数 英文 解释
    -B --databases 指定多个库备份,增加建库语句和use语句
    --compact - 调试时后,精简注释(生产不用)
    -A --all-databases --all-databases: 备份所有库
    -F --flush-logs --flush-logs: 刷新binlog
    --master-data - 增加binlog日志文件名和对应的位置点
    -l --lock-all-tables 锁表
    -x --lock-tables uobiao
    -d --no-data 只备份表结构
    -t --no-create-info 只是备份数据
    --single-transaction - 适合innodb事务型数据库(为保证数据一致性)

    常规的备份(自己玩一玩)

    如果db有事务,索引等,需要额外加一些别的参数

    myisam备份命令:
    mysqldump -uroot -p123456 -A -B -F --master-info=2 -x --events|gzip > all.sql.gz
    
    innodb(推荐)备份命令:
    mysqldump -uroot -p123456 -A -B -F --master-info=2 --single-transaction --events|gzip > all.sql.gz
    
    --single-transaction: dump时候即使有数据提交,也看不到.不影响本次dump
    

    dba推荐生产使用备份命令:

    myisam备份命令:
    mysqldump -uroot -p123456 -A -F  --flush-privileges --triggers --routines --events --hex-blob --master-info=1 -x	|gzip > all.sql.gz
    
    
    innodb(推荐)备份命令:
    mysqldump -uroot -p123456 -A -F --flush-privileges --triggers --routines --events --hex-blob --master-info=1 --single-transaction	|gzip > all.sql.gz
    
    
    -R, --routines      Dump stored routines (functions and procedures). #生产一般会加上
    

    db恢复实战:登录mysql source恢复

    mysql> system ls /opt
    all.sql.gz  people_bak_B.sql	 people_bak_multi.sql  people.gz
    people2.gz  people_bak_B.sql.gz  people_bak.sql
    
    mysql> source /opt/people_bak_B.sql;
    Query OK, 0 rows affected (0.00 sec)
    ...
    

    通过sh命令恢复

    - 如果备份时没有加-B
    [root@n1 data]# mysql -uroot -p123456 < /opt/people_bak.sql 
    ERROR 1046 (3D000) at line 22: No database selected
    [root@n1 data]# mysql -uroot -p123456 people < /opt/people_bak.sql
    
    - 如果加了-B: 无需制定库
    [root@n1 data]# mysql -uroot -p123456 < /opt/people_bak_B.sql 
    

    压缩包恢复

    - 先解压后恢复
    [root@n1 opt]# gzip -d people2.gz #-d源文件被干掉了
    
    
    - 先解压
    [root@n1 opt]# ll
    total 8
    -rw-r--r-- 1 root root 515 Mar 20 20:32 people2.sql.gz
    -rw-r--r-- 1 root root 765 Mar 20 20:32 people.sql.gz
    [root@n1 opt]# 
    [root@n1 opt]# gzip -d *
    [root@n1 opt]# ls
    people2.sql  people.sql
    
    - 去掉后缀,得到表名
    [root@n1 opt]# ls *|sed 's#.sql##g'
    people2
    people
    
    - 循环表名,逐个恢复
    [root@n1 opt]# for tbname in `ls *|sed 's#.sql##g'`;do mysql -uroot -p123456 < ${tbname}.sql;done
    

    -e 非登录执行sql命令

    [root@n1 opt]# mysql -uroot -p123456 -e "set names=latin1;show databases;"|grep -Evi "Dat|info|perf|sys"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    mysql
    people
    people2
    
    

    查看当前sql连接数: show processlist

    [root@n1 opt]# mysql -uroot -p123456 -e "show processlist;"
    
    执行多次发现同一个语句, 是慢查询,找出sql语句, 让开发建索引.
    
    - 查看完整的sql语句
    [root@n1 opt]# mysql -uroot -p123456 -e "show full processlist;"
    
    [root@n1 opt]# mysql -uroot -p123456 -e "show full processlist;"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +----+------+-----------+------+---------+------+----------+-----------------------+
    | Id | User | Host      | db   | Command | Time | State    | Info                  |
    +----+------+-----------+------+---------+------+----------+-----------------------+
    | 20 | root | localhost | NULL | Query   |    0 | starting | show full processlist |
    +----+------+-----------+------+---------+------+----------+-----------------------+
    
    
    State可能是sleep状态,sleep过多也不行
    

    MySQL sleep连接过多的完美解决办法

    当然,更根本的方法,还是从以上三点排查之:
    1. 程序中,不使用持久链接,即使用mysql_connect而不是pconnect。
    2. 程序执行完毕,应该显式调用mysql_close
    3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之

    参考: 不登陆数据库执行mysql命令小结

    mysql -u root -p'123456' -e "show full processlist;"|grep -v Sleep
    

    参考: mysql数据库批量插入数据shell脚本实现

    查看全局参数(优化:涉及到调优): show global status

    - 查看计数器insert
    [root@n1 opt]# mysql -uroot -p123456 -e "show global status;"|grep insert
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Com_insert	4
    Com_insert_select	0
    Delayed_insert_threads	0
    Innodb_rows_inserted	32
    Qcache_inserts	0
    
    - 插入数据
    mysql> insert into p1 values(1,'mm');
    Query OK, 1 row affected (0.32 sec)
    
    
    [root@n1 opt]# mysql -uroot -p123456 -e "show global status;"|grep insert
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Com_insert	5
    Com_insert_select	0
    Delayed_insert_threads	0
    Innodb_rows_inserted	33
    

    状态命令小结

    命令 说明
    show status; 查看当前会话的数据库状态信息
    show global status; 查看整个数据库运行状态信息,很重要面分析并作好监控
    show processlist; 查看正在执行的sql语句,看不全.
    show full processlist; 查看正在执行的sql语句,全.
    set global key_buffer_size = 32777218; 不重启调整db参数,重启后失效
    show variables; 查看db参数信息,如my,cnf参数生效情况

    数据库连接慢问题解决,查处慢查询语句,优化建索引.

    mysqbinlog的作用是?

    什么是mysqlbinlog?

    mysql-bin.000001
    mysql-bin.000002
    mysql-bin.000003
    mysql-bin.000004
    mysql-bin.000005
    

    mysqlbinlog记录的内容是?

    对db的更改都记录, 查询不记录.
    mysql-bin.index用来记录mysql内部的增删改查等对mysql数据库有更新的内容的记录.

    mysql> insert into p1 values (4,'mmc');
    Query OK, 1 row affected (0.32 sec)
    
    mysql> update p1 set id=10 where id=4;
    Query OK, 3 rows affected (2.25 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
    
    mysql> select * from p1;
    
    
    • 本来应该可以看到更改语句的,但是5.7好像转码了
    [root@n1 data]# mysqlbinlog mysql-bin.000001 
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #180320 22:33:17 server id 1  end_log_pos 123 CRC32 0xcf6a9f58 	Start: binlog v 4, server v 5.7.17-log created 180320 22:33:17 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    BINLOG '
    rRuxWg8BAAAAdwAAAHsAAAABAAQANS43LjE3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAACtG7FaEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    AVifas8=
    '/*!*/;
    # at 123
    #180320 22:33:17 server id 1  end_log_pos 154 CRC32 0x20d87df7 	Previous-GTIDs
    # [empty]
    # at 154
    #180320 22:33:42 server id 1  end_log_pos 219 CRC32 0x13fa964d 	Anonymous_GTID	last_committed=0	sequence_number=1
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 219
    #180320 22:33:42 server id 1  end_log_pos 293 CRC32 0xb9dcb30b 	Query	thread_id=43	exec_time=0	error_code=0
    SET TIMESTAMP=1521556422/*!*/;
    SET @@session.pseudo_thread_id=43/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=1075838976/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    BEGIN
    /*!*/;
    # at 293
    #180320 22:33:42 server id 1  end_log_pos 343 CRC32 0xd9acc6fb 	Table_map: `people`.`p1` mapped to number 233
    # at 343
    #180320 22:33:42 server id 1  end_log_pos 387 CRC32 0xc74cf4da 	Write_rows: table id 233 flags: STMT_END_F
    
    BINLOG '
    xhuxWhMBAAAAMgAAAFcBAAAAAOkAAAAAAAEABnBlb3BsZQACcDEAAgP+Av54A/vGrNk=
    xhuxWh4BAAAALAAAAIMBAAAAAOkAAAAAAAEAAgAC//wEAAAAA21tY9r0TMc=
    '/*!*/;
    # at 387
    #180320 22:33:42 server id 1  end_log_pos 418 CRC32 0x038a9985 	Xid = 334
    COMMIT/*!*/;
    # at 418
    #180320 22:34:22 server id 1  end_log_pos 483 CRC32 0x3b47deee 	Anonymous_GTID	last_committed=1	sequence_number=2
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 483
    #180320 22:34:22 server id 1  end_log_pos 557 CRC32 0x0b8ff166 	Query	thread_id=43	exec_time=0	error_code=0
    SET TIMESTAMP=1521556462/*!*/;
    BEGIN
    /*!*/;
    # at 557
    #180320 22:34:22 server id 1  end_log_pos 607 CRC32 0xcd32d9ae 	Table_map: `people`.`p1` mapped to number 233
    # at 607
    #180320 22:34:22 server id 1  end_log_pos 709 CRC32 0x3409c7f6 	Update_rows: table id 233 flags: STMT_END_F
    
    BINLOG '
    7huxWhMBAAAAMgAAAF8CAAAAAOkAAAAAAAEABnBlb3BsZQACcDEAAgP+Av54A67ZMs0=
    7huxWh8BAAAAZgAAAMUCAAAAAOkAAAAAAAEAAgAC///8BAAAAAbmr5vmr5v8CgAAAAbmr5vmr5v8
    BAAAAAbmr5vmr5v8CgAAAAbmr5vmr5v8BAAAAANtbWP8CgAAAANtbWP2xwk0
    '/*!*/;
    # at 709
    #180320 22:34:22 server id 1  end_log_pos 740 CRC32 0xb5fac9b2 	Xid = 335
    COMMIT/*!*/;
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    
    

    通过binlog恢复db实战

    • 停掉mysql(会刷新binlog or reset master)

    • 开始msyql,建库

    create database people3;
    use people3;
    create table p1 (id int,name char(40));
    insert into p1 values(1,'maotai');
    insert into p1 values(2,'毛台');
    insert into p1 values(3,'maomao');
    insert into p1 values(4,'毛毛');
    
    • 查看最新的binlog(5.7没看到insert,)
    [root@n1 data]# mysqlbinlog mysql-bin.000003
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #180320 22:41:19 server id 1  end_log_pos 123 CRC32 0xc1ff049e 	Start: binlog v 4, server v 5.7.17-log created 180320 22:41:19 at startup
    # Warning: this binlog is
    .....
    
    • 导出sql,恢复
    mysqlbinlog mysql-bin.000003 > people3.sql
    mysql> drop database people3;
    
    mysql -uroot -p123456 < people3.sql 
    

    早上10点库被某人删掉恢复案例: 全备+增量恢复

    不停库增加从库

    mysqldump -uroot -p123456 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql
    

    --master-data=1和--master-data=2的区别

    生产备份一般的=2,目的是能够找到全备的一个位置点,方便增量备份,而非让它启到什么实际作用

    --master-data=1
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154;
    
    
    --master-data=2
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154;
    
  • 相关阅读:
    动作捕捉技术赋能协作机器人示教学习
    关于Qt中的qss样式表需要注意的坑
    关于QtCreator中三种不同编译版本 debug、release、profile 的区别
    关于Qt国产化系统开发的几点总结
    关于Qt程序中动态和静态的几点总结
    CVAE
    Nginx URL重写(rewrite)配置及信息详解
    windows环境安装 ElasticSearch+SkyWalking
    nginx location 的路由规则
    centos 安装 最新版 skywalking 8.9.1
  • 原文地址:https://www.cnblogs.com/iiiiher/p/8612846.html
Copyright © 2020-2023  润新知