MySQL 官方工具utilities介紹

lhrbest發表於2020-05-20

MySQL 官方工具utilities介紹


MySQL Utilities 是官方提供的MySQL管理工具,功能面面俱到,主要有五個層面的工具:資料庫層面(複製、比較、差異、匯出、匯入)、稽核日誌層面、伺服器層面(例項克隆、例項資訊)、系統層面(磁碟使用情況、冗餘索引、搜尋後設資料、程式)、高可用性層面(主從複製、故障轉移、主從同步)。此工具讓你在mysql的管理上如虎添翼。

介紹

資料庫層面

稽核日誌層面

伺服器層面

系統層面

高可用性層面





    mysql-utilities 是python編寫 MySQL官方版的命令列工具集,涵蓋主從校驗,主從建立,主從切換等等

    https://dev.mysql.com/doc/workbench/en/wb-mysql-utilities.html

    MySQL Utilities工具包概述及安裝

    Mysql Utilities


    mysql-utilities 是python編寫 MySQL官方版的命令列工具集,涵蓋主從校驗,主從建立,主從切換等等

    安裝

    rpm安裝
    注意:不要直接透過yum來安裝mysql-utilities,mysql-utilities 1.6.5和mysql-connector-python 8.0.12在一起有問題!

     正確的安裝方式如下:

    # rpm -Uvh 
    # rpm -Uvh 
    -- 安裝mysql-utilities包,依賴於Python2.7,版本需要對應,否則報錯
    rpm -e mysql-connector-python-2.1.8-1.el7.x86_64 --nodeps
    #centos 7
    rpm -Uvh 
    #centos 6
    rpm -Uvh 
    yum install -y mysql-utilities
    mysqlrplcheck --master=root:lhr@192.168.68.131:3306 --slave=root:lhr@192.168.68.133:3306 -v
    mysqlrplshow --master=root:lhr@192.168.68.131:3306 --discover-slaves-login=root:lhr --verbose
    # report-host=192.168.68.131
    # report-port=3306


    mysql5.7 yum源 還會安裝依賴mysql-connector-python 8.0.12-1.el7
    MySQL 官方工具utilities介紹

    二進位制安裝

    yum install mysql-connector-python
    wget 
    tar -zxf mysql-utilities-1.6.5.tar.gz
    cd mysql-utilities-1.6.5
     python ./setup.py build
    python ./setup.py install

    透過tar.gz安裝和yum安裝mysql-utilities出現錯誤
    MySQL 官方工具utilities介紹
    MySQL 官方工具utilities介紹

    可能模組沒有在搜尋路徑中
    MySQL 官方工具utilities介紹

    export PYTHONPATH=$PYTHONPATH:/root/mysql-utilities-1.6.5/mysql/utilities/common/tools
    試了也不行

    安裝mysql5.6 yum源以rpm形式安裝的mysql-utilities不會報module找不到

    解決

    解除安裝原mysql-connector-python8.0版本 
    yum  -y remove  mysql-connector-python
    並下載安裝mysql-connector-python-2.1.7
    rpm -Uvh 
     mysqldbcompare --version
    MySQL Utilities mysqldbcompare version 1.6.5 
    License type: GPLv2

    當時還在糾結為什麼安裝mysql5.7 yum源在以yum安裝mysql-utilities和以tar.gz形式來安裝mysql-utilites
    兩種方式該有的/mysql/utilities/common和tools.py 下的check_python_version都有了,而安裝mysql5.6
    yum源不報錯,檢視 mysql-connector-python版本時才發現兩者的版本不一樣,在MySQL中 mysql-co
    nnector-python 8.0.12-1.el7 高版本的不相容低版本的,這是個坑-__-


    Traceback (most recent call last):
      File "/bin/mysqldiff", line 28, in <module>    from mysql.utilities.common.tools import check_python_version
    ImportError: No module named utilities.common.tools

    直接用yum安裝的mysqldiff會提示No module named utilities.common.tools

    解決方法:

     remove mysql-connector-python --Uvh http:rpm -Uvh 

    MySQL Utilities 是一組基於python語言編寫的python庫的命令列實用工具集,依賴於python 2.6。

    該工具提供了MySQL資料庫運維工程中常用的一些工具,諸如克隆、複製、比較、差異、匯出、匯入、安裝、配置、索引、磁碟檢視等等。有了這個工具包,就好比那些個神醫大夫,不管大病小病,先去搞個化驗,搞個CT,你也可以當華佗。MySQL Utilities提供了各種平臺的軟體包,如果沒有找到對應自己平臺的包,可以透過原始碼進行編譯安裝。本文主要描述MySQL Utilities安裝以及各個工作功能初步描述。


    一、MySQL Utilities功能及元件

    Binary Log Operations(二進位制日誌操作) 

            mysqlbinlogmove   二進位制日誌移動

            mysqlbinlogpurge  二進位制日誌清理

            mysqlbinlogrotate 二進位制日誌老化工具    


    Database Operations(資料庫操作)

            mysqldbexport     資料匯出

            mysqldbimport     資料匯入

            mysqldbcopy       庫級別資料庫複製

            mysqldiff         資料庫物件級別比較工具

            mysqldbcompare    資料庫庫級別比較工具


    General Operations(通用用的操作)     

            mysqldiskusage    磁碟空間檢視

            mysqlfrm          恢復故障表.frm檔案

            mysqluserclone    使用者克隆工具

            mysqluc           Utilities幫助工具 

            mysqlindexcheck   索引檢測工具

            mysqlmetagrep     後設資料過濾器

            mysqlprocgrep     程式搜尋及清理工具


    High Availability Operations(高可用)

        mysqlreplicate   主從複製工具

        mysqlrpladmin    主從複製管理工具

        mysqlrplcheck    主從複製檢測工具

        mysqlrplms       主從多元複製工具

        mysqlrplshow     主從複製拓撲圖工具

        mysqlrplsync     主從複製同步工具

        mysqlfailover    主從failover工具

        mysqlslavetrx    從庫事務跳過工具 


    Server Operations(伺服器操作)

            mysqlserverinfo    伺服器資訊檢視工具

            mysqlserverclone   伺服器克隆工具    


    Specialized Operations(特殊操作)

            mysqlauditadmin    審計管理工具 

            mysqlauditgrep     審計日誌過濾工具



    二、安裝需求及下載地址

        需求

                Python 2.6

                MySQL Connector/Python 聯結器

        下載地址:

                http://dev.mysql.com/downloads/utilities/


    三、安裝示例

    ###本次安裝使用1.6.4版本,安裝前,需要先安裝mysql到python聯結器

    # cat /etc/redhat-release 

    CentOS release 6.7 (Final)

    # rpm -Uvh mysql-connector-python-2.1.4-1.el6.x86_64.rpm 

    # rpm -Uvh mysql-utilities-1.6.4-1.el6.noarch.rpm 


    ###如果沒有安裝聯結器,則收到如下錯誤提示

    # rpm -Uvh mysql-utilities-1.6.4-1.el6.noarch.rpm 

    warning: mysql-utilities-1.6.4-1.el6.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY

    error: Failed dependencies:

            mysql-connector-python >= 2.0.0 is needed by mysql-utilities-1.6.4-1.el6.noarch


    ###檢視安裝後生成的檔案        

    # rpm -ql mysql-utilities-1.6.4-1.el6|grep "/usr/bin"

    /usr/bin/mysqlauditadmin

    /usr/bin/mysqlauditgrep

    /usr/bin/mysqlbinlogmove

    /usr/bin/mysqlbinlogpurge

    /usr/bin/mysqlbinlogrotate

    /usr/bin/mysqldbcompare

    /usr/bin/mysqldbcopy

    /usr/bin/mysqldbexport

    /usr/bin/mysqldbimport

    /usr/bin/mysqldiff

    /usr/bin/mysqldiskusage

    /usr/bin/mysqlfailover

    /usr/bin/mysqlfrm

    /usr/bin/mysqlgrants

    /usr/bin/mysqlindexcheck

    /usr/bin/mysqlmetagrep

    /usr/bin/mysqlprocgrep

    /usr/bin/mysqlreplicate

    /usr/bin/mysqlrpladmin

    /usr/bin/mysqlrplcheck

    /usr/bin/mysqlrplms

    /usr/bin/mysqlrplshow

    /usr/bin/mysqlrplsync

    /usr/bin/mysqlserverclone

    /usr/bin/mysqlserverinfo

    /usr/bin/mysqlslavetrx

    /usr/bin/mysqluc

    /usr/bin/mysqluserclone    


    四、獲取幫助

    1、透過mysqluc獲取幫助

    ###可以透過呼叫mysqluc命令列工具來獲取這些工具的幫助資訊

    ### mysqluc提供一個自帶的命令列提示符視窗,在這個視窗下也可以完成相應的命令操作


    [root@node1 ~]# mysqluc

    Launching console ...


    Welcome to the MySQL Utilities Client (mysqluc) version 1.6.4

    Copyright (c) 2010, 2016 Oracle and/or its affiliates. All rights reserved.

    This is a release of dual licensed MySQL Utilities. For the avoidance of

    doubt, this particular copy of the software is released

    under the version 2 of the GNU General Public License.

    MySQL Utilities is brought to you by Oracle.


    Type 'help' for a list of commands or press TAB twice for list of utilities.


    mysqluc> help

    Command                 Description                                        

    ----------------------  ---------------------------------------------------

    help utilities          Display list of all utilities supported.           

    help <utility>          Display help for a specific utility.               

    show errors             Display errors captured during the execution of the

                            utilities.                                         

    clear errors            clear captured errors.                             

    show last error         Display the last error captured during the         

                            execution of the utilities                         

    help | help commands    Show this list.                                    

    exit | quit             Exit the console.                                  

    set <variable>=<value>  Store a variable for recall in commands.           

    show options            Display list of options specified by the user on   

                            launch.                                            

    show variables          Display list of variables.                         

    <ENTER>                 Press ENTER to execute command.                    

    <ESCAPE>                Press ESCAPE to clear the command entry.           

    <DOWN>                  Press DOWN to retrieve the previous command.       

    <UP>                    Press UP to retrieve the next command in history.  

    <TAB>                   Press TAB for type completion of utility, option,  

                            or variable names.                                 

    <TAB><TAB>              Press TAB twice for list of matching type          

                            completion (context sensitive).                    


    ###檢視utilities包中所有的命令列工具

    mysqluc> help utilities 


    Utility            Description                                             

    -----------------  --------------------------------------------------------

    mysqlauditadmin    audit log maintenance utility                           

    mysqlauditgrep     audit log search utility                                

    mysqlbinlogmove    binary log relocate utility                             

    mysqlbinlogpurge   purges unnecessary binary log files                     

    mysqlbinlogrotate  rotates the active binary log file                      

    mysqldbcompare     compare databases for consistency                       

    mysqldbcopy        copy databases from one server to another               

    mysqldbexport      export metadata and data from databases                 

    mysqldbimport      import metadata and data from files                     

    mysqldiff          compare object definitions among objects where the      

                       difference is how db1.obj1 differs from db2.obj2        

    mysqldiskusage     show disk usage for databases                           

    mysqlfailover      automatic replication health monitoring and failover    

    mysqlfrm           show CREATE TABLE from .frm files                       

    mysqlgrants        display grants per object                               

    mysqlindexcheck    check for duplicate or redundant indexes                

    mysqlmetagrep      search metadata                                         

    mysqlprocgrep      search process information                              

    mysqlreplicate     establish replication with a master                     

    mysqlrpladmin      administration utility for MySQL replication            

    mysqlrplcheck      check replication                                       

    mysqlrplms         establish multi-source replication                      

    mysqlrplshow       show slaves attached to a master                        

    mysqlrplsync       replication synchronization checker utility             

    mysqlserverclone   start another instance of a running server              

    mysqlserverinfo    show server information                                 

    mysqlslavetrx      skip transactions on slaves                             

    mysqluserclone     clone a MySQL user account to one or more new users     


    ###也可直接在mysqluc提示符下輸入 help command 來獲取對應命令的幫助資訊,如下

    mysqluc> help mysqlauditadmin 

    Usage: mysqlauditadmin --server=user:pass@host:port --show-options 

    # Author : Leshami

    # Blog   : http://blog.csdn.net/leshami

    mysqlauditadmin - audit log maintenance utility 


    Options:

    Option                     Description                                     

    -------------------------  ------------------------------------------------

    --version                  show program's version number and exit          

    --help                     display this help message and exit              

    --license                  display program's license and exit              

    --server=SERVER            connection information for the server in the    

                               form:                                           

                               <user>[:<password>]@<host>[:<port>][:<socket>]  

                               or <login-path>[:<port>][:<socket>] or <config- 

                               path>[<[group]>].                               

    --audit-log-name=LOG_NAME  full path and file name for the audit log file. 

                               Used for stats and copy options.                

    --show-options             display the audit log system variables.         

    --remote-login=RLOGIN      user name and host to be used for remote login  

                               for copying log files. Format:                  

                               <user>:<host_or_ip> Password will be prompted.  

    --file-stats               display the audit log file statistics.          

    --copy-to=COPY_LOCATION    the location to copy the audit log file         

                               specified. The path must be locally accessible  

                               for the current user.                           

    --value=VALUE              value used to set variables based on the command

                               specified. See --help for list per command.     

    --ssl-ca=SSL_CA            path to a file that contains a list of trusted  

                               SSL CAs.                                        

    --ssl-cert=SSL_CERT        name of the SSL certificate file to use for     

                               establishing a secure connection.               

    --ssl-key=SSL_KEY          name of the SSL key file to use for establishing

                               a secure connection.                            

    --ssl=SSL                  specifies if the server connection requires use 

                               of SSL. If an encrypted connection cannot be    

                               established, the connection attempt fails. By   

                               default 0 (SSL not required).                   

    -v, --verbose              control how much information is displayed. e.g.,

                               -v = verbose, -vv = more verbose, -vvv = debug  

                               Available Commands: copy - copy the audit log to

                               a locally accessible path policy - set the audit

                               log policy Values = ALL, NONE, LOGINS, QUERIES, 

                               DEFAULT rotate - perform audit log rotation     

                               rotate_on_size - set the rotate log size limit  

                               for auto rotation Values = 0, 4294967295    


    2、直接在shell提示符下獲取命令幫助

    ###如下示例

    [root@node1 ~]# mysqlfailover --help|head

    MySQL Utilities mysqlfailover version 1.6.4 

    License type: GPLv2

    Usage: mysqlfailover --master=root@localhost --discover-slaves-login=root 

                    --candidates=root@host123:3306,root@host456:3306 


    mysqlfailover - automatic replication health monitoring and failover


    Options:

      --version             show program's version number and exit

      --help                display this help message and exit

      --license             display program's license and exit 


    3、基於Linux man獲取命令幫助

    ###如下示例

    root@node1 ~]# man mysqlfailover

    MYSQLFAILOVER(1)                MySQL Utilities               MYSQLFAILOVER(1)


    NAME

           mysqlfailover - Automatic replication master failover


    SYNOPSIS

           mysqlfailover [options]



    mysqlreplicate

    主從複製工具

    mysqlreplicate --master=admin:admin@10.186.30.73:3307 \
               --slave=admin:admin@10.186.30.58:3307 --rpl-user=rpl:rpl

    –pedantic選項來確保主和從複製成功,當且僅當兩個伺服器具有相同的儲存引擎,相同的預設儲存引擎和相同的InnoDB儲存引擎

    mysqlrplcheck

    主從複製檢測工具

    mysqlrplcheck --master=admin:admin@10.186.30.73:3307 \
               --slave=admin:admin@10.186.30.58:3307 \
                --show-slave-status -vv

    mysqlrplshow

    主從複製拓撲圖工具

    mysqlrplshow --master=admin:admin@10.186.30.73:3307    \
             --discover-slaves-login=admin:admin --verbose --recurse

    mysqlrpladmin

    主從複製管理工具

    mysqlrpladmin --master=admin:admin@10.186.30.73:3307 \
               --slave=admin:admin@10.186.30.58:3307 Health
     
    mysqlrpladmin --master=admin:admin@10.186.30.73:3307 \
               --slave=admin:admin@10.186.30.58:3307 gtid
               
    mysqlrpladmin --master=admin:admin@10.186.30.73:3307 \
              --slave=admin:admin@10.186.30.58:3307 reset
     
    mysqlrpladmin -vv --master=admin:admin@10.186.30.73:3307 \
              --slave=admin:admin@10.186.30.58:3307  \
              --new-master=admin:admin@10.186.30.58:3307 --demote-master switchover
     
    mysqlrpladmin -vv --slave=admin:admin@10.186.30.58:3307 failover
     
    mysqlrpladmin 1.3.6對mysql5.7 會出現錯誤
    # Checking privileges.
    ERROR: Query failed. 1054 (42S22): Unknown column 'password' in 'field list'

    mysqlfailover

    主從切換工具

    mysqlfailover --master=admin:admin@10.186.30.73:3307 --discover-slaves-login=admin --candidates=admin:admin@10.186.30.58:3307

    mysqldbcompare

    資料庫庫級別比較工具

    mysqldbcompare --server1=admin:admin@10.186.30.73:3307 --server2=admin:admin@10.186.30.58:3307 --changes- for =server2 --difftype=sql --run-all-tests test

    詳細介紹

    Binary Log Operations(二進位制日誌操作)
             mysqlbinlogmove   二進位制日誌移動
             mysqlbinlogpurge  二進位制日誌清理
             mysqlbinlogrotate 二進位制日誌老化工具   
     
    Database Operations(資料庫操作)
             mysqldbexport     資料匯出
             mysqldbimport     資料匯入
             mysqldbcopy       庫級別資料庫複製
             mysqldiff         資料庫物件級別比較工具
             mysqldbcompare    資料庫庫級別比較工具
     
    General Operations(通用用的操作)    
             mysqldiskusage    磁碟空間檢視
             mysqlfrm          恢復故障表.frm檔案
             mysqluserclone    使用者克隆工具
             mysqluc           Utilities幫助工具
             mysqlindexcheck   索引檢測工具
             mysqlmetagrep     後設資料過濾器
             mysqlprocgrep     程式搜尋及清理工具
     
    High Availability Operations(高可用)
             mysqlreplicate   主從複製工具
             mysqlrpladmin    主從複製管理工具
             mysqlrplcheck    主從複製檢測工具
             mysqlrplms       主從多元複製工具
             mysqlrplshow     主從複製拓撲圖工具
             mysqlrplsync     主從複製同步工具
             mysqlfailover    主從failover工具
             mysqlslavetrx    從庫事務跳過工具
     
    Server Operations(伺服器操作)
             mysqlserverinfo    伺服器資訊檢視工具
             mysqlserverclone   伺服器克隆工具   
     
    Specialized Operations(特殊操作)
             mysqlauditadmin    審計管理工具
             mysqlauditgrep     審計日誌過濾工具

    參考:

    https://dev.mysql.com/doc/workbench/en/wb-mysql-utilities.html

    MySQL Utilities工具包概述及安裝

    Mysql Utilities




    MySQL Utilities是官方提供的MySQL管理工具集
    下載地址:
    當前版本1.6.5 
    二進位制包:
    二進位制包:

    MySQL Utilities是基於python編寫的,不需要安裝其他任何工具和庫
    提供一組命令列工具用於維護和管理MySQL伺服器:
    資料庫層面:複製、比較、差異、匯出、匯入
    稽核日誌層面:
    伺服器層面:例項克隆、例項資訊
    系統層面:磁碟使用情況、冗餘索引、搜尋後設資料、程式
    高可用層面:主從複製、故障轉移、主從同步

    安裝

    儘量不要用 yum 來安裝 mysql-utilities 1.6.5版本的mysql-utilites和mysql-connector-python有相容性問題
    實測,可以使用 yum 安裝 1.3.6的mysql-utilites和1.1.6的mysql-connector-python

    # 安裝 1.3.6 版本 yum方式
    yum install
    yum install
    # 解除安裝
    yum -y remove mysql-connector-python
    # 安裝 1.6.5 版本 二進位制方式
    最新版本 1.6.5 建議使用二進位制安裝(tar包中自帶connector無需單獨安裝)
    wget
    tar zxf mysql-utilities-1.6.5.tar.gz
    cd mysql-utilities-1.6.5
    python ./setup.py build
    python ./setup.py install

    連線MySQL伺服器

    login-paths(.mylogin.cnf)

    推薦方式,加密的,不會暴露連線資訊
    mysql_config_editor set --login-path= mysql_77 --host=192.168.1.77 --user=root --port=3306 --password
    mysql_config_editor是mysql自帶工具,執行如上命令後會在家目錄生成加密檔案.mylogin.cnf
    檢視檔案內容:
    mysql_config_editor print --login-path= mysql_77
    [mysql_77]
    user = root
    password = *****
    host = 192.168.1.77
    port = 3306
    使用:
    mysqlserverinfo --server= mysql_77 --format=vertical
    mysql --login-path= mysql_77

    使用配置檔案

    /etc/my.cnf 中[client]段
    [client]
    port = 3306
    socket = /tmp/mysql.sock
    user=root
    password=root123
    使用:
    mysqlserverinfo --server= /etc/my.cnf[client] --format=vertical

    命令列引數

    該方式最不安全
    <user>[:<passwd>]@<host>[:<port>][:<socket>]
    使用:
    mysqlserverinfo --server= root:root123@192.168.1.77:3306 --format=vertical

    資料庫層面

    以下工具工作在資料庫級別,用於管理一個或多個伺服器的資料庫

    mysqldbcompare
    - 比較兩個伺服器或同個伺服器上的資料庫
    - 比較定義檔案和資料
    - 產生差異報告
    - 生成差異性的轉換SQL語句
    mysqldbcopy
    - 伺服器之間複製資料庫
    - 在同一伺服器上克隆資料庫
    - 支援重新命名
    mysqldbexport
    - 從一個或多個資料庫匯出後設資料或資料
    - 支援格式:SQL CSV TAB Grid Vertical
    mysqldbimport
    - 從一個或多個檔案匯入後設資料或資料
    - 支援mysqldbexport的各種格式
    mysqldiff
    - 比較物件的定義
    - 產生差異報告

    mysqldbcompare

    mysqldbcompare --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1:db2

    比較兩個資料庫物件的差異,包括表、檢視、觸發器、儲存過程、函式、事件
    比較檢測的步驟:
    1、資料庫定義,確保資料庫存在,若不存在,不需要下一步檢測
    2、資料庫物件,--skip-object-compare跳過
    3、物件定義,比較create語句,--skip-diff跳過
    4、檢測錶行數,僅檢查行數是否一致,--skip-row-count跳過
    5、表資料一致性,先全表checksum校驗,然後找出不同 --skip-checksum-table跳過表校驗,--skip-data-check跳過資料檢查

    --diff-style 定義輸出風格:
    unified 預設,統一格式
    context 上下文格式
    differ differ-style格式
    sql 轉換語句
    --format 顯示行丟失或改變的輸出
    grid 預設,網格化
    vertical 類似\G
    csv 、tab
    --changes-for 控制差異報告(預設)還是轉換報告(需要--difftype=sql)

    許可權:
    對所比較的資料庫,select,create temporary tables,insert
    mysql資料庫,select
    防止比較操作被寫入二進位制日誌,需要啟用  --disable-binary-logging

    mysqldbcompare --server1=mysql_78 --server2=mysql_88 db1:db2 --run-all-tests

    實際上並不好用

    mysqldbcopy

    mysqldbcopy --source=user:pass@host:port:socket --destination=user:pass@host:port:socket orig_db:new_db

    從源伺服器上覆制一個資料庫到另一個目標伺服器上,源伺服器和目標伺服器可以是同一臺,資料庫名字可相同也可不同
    希望複製的新庫或新的伺服器改變儲存引擎,在這種情況下,使用mysqldbcopy工具非常便捷

    引數:
    -d,--drop-first 若目錄中存在,先drop
    --new-storage-engine 目標使用新的引擎
    --default-storage-engine 目標的預設引擎
    --locking 複製過程中的鎖級別:no-locks,lock-all,snaphot(預設)
    --rpl-user
    --rpl  直接搭建主從

    許可權:
    源資料庫,select,show view,event,trigger  同時mysql資料庫要有select
    目標資料庫,create,alter,select,insert,update,lock tables,drop(--drop-first),super(二進位制日誌啟用),create view,create routine,execute,event,trigger,grant option,

    mysqldbcopy --source=mysql_77 --destination=mysql_77 ecard:new_ecard
    mysqldbcopy --source=mysql_77 --destination=mysql_77 test:new_test -vvv --drop-first --locking=lock-all
    mysqldbcopy --source=mysql_77 --destination=mysql_88 --drop-first --all  #複製整個例項

    mysqldbexport

    mysqldbexport --server=user:pass@host:port:socket db1, db2, db3

    匯出資料

    選項:
    --file-per-table 每個表單獨儲存,格式,db.table.csv
    --rpl 和 --rpl-user 包含主從同步語句 --comment-rpl 註釋主從語句

    許可權:
    源伺服器 select,show view mysql資料庫的select

    # 只匯出定義語句
    mysqldbexport --server=mysql_77 --format=sql ecard --export=definitions > ecard.sql
    # 只匯入資料 批次插入
    mysqldbexport --server=mysql_77 --format=sql ecard --export=data --bulk-insert > ecard.sql
    mysqldbexport --server=mysql_77 --format=sql ecard --export=data --bulk-insert --file-per-table  #一個表一個檔案

    若資料庫中並不是所有表是innodb引擎,為確保資料一致性,需要在匯入 前鎖定表,加上 --locking=lock-all
    # 匯出結構和資料 併為當前資料庫建立一個從伺服器
    mysqldbexport --server=mysql_77 --format=sql ecard --export=both --rpl-user=root --rpl=master > ecard.sql

    mysqldbimport

    mysqldbimport --server=user:pass@host:port:socket db1.csv db2.sql db3.grid

    匯入資料,若一個物件已經存在於目標伺服器上,將先刪除再匯入

    選項:
    -- format 格式
    -- import data definitions(預設) both
    -- drop - first
    -- no - headers 排除表頭,適用於tab csv格式
    -- dryrun   預匯入不執行,測試用。測試檔案是否有效
    -- table
    --skip - blobs  --skip -rpl  --skip -gtid
    --skip =SKIP_OBJECTS 忽略的物件 
    tables ,  views ,  triggers ,  procedures ,  functions , events ,  grants ,  data ,  create_db

    mysqldbimport --server=mysql_77 --import=definitions --format=csv data.csv
    mysqldbimport --server=mysql_77 --import=data --bulk-insert --format=csv data.csv

    mysqldiff

    mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4

    比較物件定義是否相同,不能比較資料是否一致

    mysqldiff --server1=mysql_77 test.mytest:test.t
    mysqldiff --server1=mysql_77 test.mytest:test.t --difftype=sql --show-reverse -vvv

    稽核日誌層面

    稽核日誌是MySQL企業版的功能,必需開啟稽核日誌外掛

    mysqlauditadmin
    - 監控審計日誌
    - 複製 輪換和配置稽核日誌
    mysqlauditgrep
    - 搜尋日誌
    - 輸出不同格式的結果

    mysqlauditadmin --server=user:pass@host:port --show-options
    mysqlauditgrep [options] AUDIT_LOG_FILE

    伺服器層面

    mysqlserverclone
    - 克隆一個新的例項
    mysqlserverinfo
    - 顯示伺服器資訊
    - 搜尋主機上執行的服務
    - 訪問線上或離線的服務

    mysqlserverclone

    mysqlserverclone --server=user:pass@host:port:socket --new-data=/tmp/data2 --new-port=3310 --new-id=12 --root-password=root

    在同一個主機上建立一個新的服務例項,建立一個新的datadir和socket檔案,並啟動該例項
    克隆前要先刪除datadir目錄下檔案並配置讀寫許可權

    mysqlserverclone --server=instance_3306 --new-data=/data/tmp/ --new-port=3310 --root-password=3310 --mysqld=--log-bin=mysql-bin-3310 --new-id=3310 --user=mysql -vvv

    mysqlserverinfo

    mysqlserverinfo --server=user:pass@host:port:socket --format=grid

    選項:
    - d ,  -- show - defaults 顯示config檔案資訊
    -- show - servers 若啟動了多個例項 可使用該命令檢視

    mysqlserverinfo --server=mysql_77 -d --format=grid -vvv --show-defaults  #額外顯示defaults資訊
    mysqlserverinfo --server=mysql_77 -d --format=grid -vvv --show-defaults --no-headers

    系統層面

    mysqldiskusage
    - 顯示資料庫磁碟使用情況
    - 生成報表支援 sql csv tab grid vertical
    mysqlfrm
    - 讀取 frm 檔案
    - 生成表 create 語句
    mysqlindexcheck
    - 讀取一個或多個表的索引
    - 檢查冗餘和重複的索引
    mysqlmetagrep
    - 搜尋後設資料
    - 正規表示式搜尋資料庫
    - 搜尋查詢生成sql語句
    mysqlprocgrep
    - 搜尋程式資訊
    - 搜尋生成 sql 語句
    - kill匹配到的程式
    mysqluserclone
    - 克隆使用者
    - 顯示使用者許可權
    mysqluc
    - MySQL Utilities命令列客戶端
    - 允許長連線到MySQL伺服器
    - 可使用tab完成工具名稱和選項
    - 允許使用命令短名稱 如 mysqlserverinfo -> serverinfo

    mysqldiskusage

    mysqldiskusage --server=user:pass@host:port:socket db1 --all

    顯示一個或多個資料庫所使用磁碟空間大小,可顯示二進位制日誌、慢查詢日誌、錯誤日誌、查詢日誌、二進位制中繼日誌、innodb表空間大小
    讀取檔案系統失敗,或者服務不在本地,那麼將不能確定檔案大小

    選項:
    - b ,  -- binlog
    - r ,  -- relaylo
    - l ,  -- logs
    - i ,  -- innodb
    - m ,  -- empty
    - a ,  -- all

    mysqldiskusage --server=mysql_77
    mysqldiskusage --server=mysql_77 --format=g -a -vvv

    mysqlfrm

    mysqlfrm --server=[user[:<pass>]@host[:<port>][:<socket>]|<login-path>[:<port>][:<socket>]]  [path\tbl1.frm|db:tbl.frm]

    恢復工具,讀取frm檔案並從中找到 檢視定義語句
    注意:不能讀取到外來鍵約束和自增長序列

    再生例項模式:
    --basedir或--server選項連線到已經安裝的例項。該過程不會改變原始frm檔案,指定--port選項給再生例項使用,該埠不能與現有埠衝突,讀取完frm檔案後,再生例項會關閉,所有臨時檔案將被刪除
    診斷模式:
    指定--diagnostic選項,byte-by-byte讀取frm檔案,儘可能多的恢復資訊,該模式不能校驗字符集

    選項:
    --quiet 僅顯示create語句和警告、錯誤資訊
    --show-stats 統計frm檔案資訊

    mysqlfrm --basedir=/usr ttlsa_com:data.frm --port=3333 --user=mysql -vvv
    mysqlfrm --diagnostic /root/data_center  #讀取data_center目錄下所有frm檔案
    mysqlfrm --diagnostic /root/t7_data_center/t7_venue.frm

    利用frm和ibd恢復資料

    在某此情況下,資料庫崩潰,無法啟動,此時,可利用磁碟中的frm和ibd檔案恢復資料,因為資料庫儲存的資料實際上還是儲存在檔案裡的

    myisam引擎:直接複製這三個檔案即可使用,不需要恢復
    xxx.frm 表結構檔案
    xxx.MYD 資料檔案
    xxx.MYI 索引檔案
    innodb引擎innodb某些後設資料是儲存在 ibdata1檔案中的
    xxx.frm 表結構檔案  -> 使用mysqlfrm獲取
    xxx.ibd 資料和索引檔案 -> 覆蓋檔案

    恢復前提:innodb_file_per_table = 1
    若不能使用mysqlfrm工具時,要獲得表結構語句[ 不推薦]:
    1、建立同名表,create table t_access(id int);
    2、使用要恢復表的frm檔案替換同名frm檔案,修改frm檔案許可權 chown mysql:mysql xxx.frm
    3、flush tables;
    4、show create table t_access;  #注意,此時資料庫日誌中會顯示欄位數量,如
    [Warning] InnoDB: Table tt/t_access contains 1 user defined columns in InnoDB, but  4 columns
    5、重新建立擁有相同欄位的同名表
    6、再次用要恢復的表的frm檔案替換同名frm檔案,修改許可權
    7、資料庫關機
    8、配置檔案設定 innodb_force_recovery=6 重啟資料庫
    9、得到表結構
    顯然,使用mysqlfrm工具更為方便

    利用frm和ibd恢復資料操作流程

    場景:因資料庫損壞,ibdata1檔案被誤刪,資料庫啟動後,所有innodb引擎的表能顯示名稱,但開啟時提示表不存在
    目標:需要恢復其中一張表 t7_system_nodes 可利用的檔案為
    /tmp/t7_system_nodes.frm -> 儲存了表結構
    /tmp/t7_system_nodes.ibd -> 儲存了表資料

    第一步:利用mysqlfrm工具恢復表結構
    mysqlfrm --diagnostic /tmp/t7_system_nodes.frm --quiet
    # WARNING: Cannot generate character set or collation names without the --server option.
    # CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
    CREATE TABLE  tmp. t7_system_nodes (
    id int(10) unsigned NOT NULL AUTO_INCREMENT comment '主鍵ID', 
    title varchar(150) DEFAULT NULL comment '節點名', 
    action varchar(60) DEFAULT NULL comment '路徑名', 
    status tinyint(1) DEFAULT NULL comment '狀態(1: 啟用, 2: 禁用)', 
    remark varchar(765) DEFAULT NULL comment '備註', 
    sort smallint(4) DEFAULT NULL comment '排序', 
    pid int(11) DEFAULT NULL comment '父節點ID', 
    level tinyint(1) DEFAULT NULL comment '等級', 
    PRIMARY KEY  PRIMARY ( id)
    ) ENGINE=InnoDB COMMENT '系統節點表';
    第二步:在任意資料庫建立該表 如test庫
    注意,上一步的表名包含庫名 tmp. t7_system_nodes 建立時需要把庫名去掉或改成 test. t7_system_nodes
    mysql> CREATE TABLE  t7_system_nodes (
    id int(10) unsigned NOT NULL AUTO_INCREMENT comment '主鍵ID',
    title varchar(150) DEFAULT NULL comment '節點名',
    action varchar(60) DEFAULT NULL comment '路徑名',
    status tinyint(1) DEFAULT NULL comment '狀態(1: 啟用, 2: 禁用)',
    remark varchar(765) DEFAULT NULL comment '備註',
    sort smallint(4) DEFAULT NULL comment '排序',
    pid int(11) DEFAULT NULL comment '父節點ID',
    level tinyint(1) DEFAULT NULL comment '等級',
    PRIMARY KEY  PRIMARY ( id)
    ) ENGINE=InnoDB COMMENT '系統節點表';
    Query OK, 0 rows affected
    第三步:解除安裝表空間
    mysql> alter table  t7_system_nodes discard tablespace ;
    Query OK, 0 rows affected
    該操作會刪除t7_system_nodes.ibd檔案
    第四步:複製t7_system_nodes.ibd檔案
    將要還原資料的t7_system_nodes.ibd檔案複製到資料庫目錄下,並修改檔案屬主
    cp /tmp/t7_system_nodes.ibd /data/mysql/test
    chown mysql:mysql /data/mysql/test/t7_system_nodes.ibd
    第五步:匯入表空間
    mysql> alter table  t7_system_nodes import tablespace;
    Query OK, 0 rows affected
    第六步:檢查資料是否已恢復
    mysql> select count(*) from  t7_system_nodes;
    +----------+
    | count(*) |
    +----------+
    | 75 |
    +----------+
    1 row in set
    資料已經恢復!
    該過程不需要重啟資料庫例項、不需要修改資料庫配置、操作方便,推薦
    mysqlindexcheck

    mysqlindexcheck --server=user:pass@host:port:socket db1.table1 db2 db3.table2

    識別重複的和潛在冗餘的表索引
    除了這些庫的表mysql, INFORMATION_SCHEMA, performance_schema,可以掃描所有其他庫

    選項:
    --show-drops 顯示drop語句刪除冗餘索引
    -- show - indexes 顯示每個表的索引

    mysqlindexcheck --server=mysql_77 ecard
    mysqlindexcheck --server=mysql_77 ecard --show-drops --show-indexes --report-indexes

    mysqlmetagrep

    mysqlmetagrep --server=user:pass@host:port:socket [options] pattern

    搜尋資料庫物件

    mysqlmetagrep --server=mysql_77 --pattern="d_"
    mysqlmetagrep --server=mysql_77 --pattern="%school%"
    mysqlmetagrep --server=mysql_77 -Gb --pattern="ent"  #-Gb正則匹配

    mysqlprocgrep

    mysqlprocgrep --server=user:pass@host:port:socket [options]

    搜尋程式,並執行某些操作

    選項:
    --age 指定時間
    --match-xxx 指定匹配條件,xxx可以是 id user host db command info state
    -- kill - connection
    -- kill - query

    mysqlprocgrep --server=mysql_77
    mysqlprocgrep --server=mysql_77 --match-user=root  --kill-connection --match-state=sleep  #kill掉root使用者狀態為sleep的程式
    mysqlprocgrep --kill-connection --match-state=sleep --print-sql  #生成kill空閒程式的儲存過程
    mysqlprocgrep --server=mysql_77 --match-user=lepei --age=5 --kill-query

    kill程式測試並不成功

    mysqluserclone

    mysqluserclone --source=user:pass@host:port:socket --destination=user:pass@host:port:socket joe@localhost sam:secret1@localhost

    以現有資料庫上的使用者作為模板創作一個或多個具有相同許可權的賬戶

    選項:
    - d ,  -- dump 顯示grant語句並不執行
    - l ,  -- list 列出所有使用者

    # 顯示所有使用者
    mysqluserclone --source=mysql_77 --list -vvv
    # 複製admin使用者到3308例項,使用者名稱為user1,密碼為passwd1,主機為10.%
    mysqluserclone --source=instance_3306 --destination=instance_3308 admin@localhost  user1:passwd1@10.% -vvv
    # 顯示使用者grant語句
    mysqluserclone --source=mysql_77 --dump --list

    mysqluc

    命令列工具,允許執行使用者當前安裝mysql工具的任何命令 --utildir用於指定MySQL Utilities安裝路徑
    支援tab 支援管道

    mysqluc -e "help utilities"
    mysqluc -e "set SRV=mysql_77; mysqldiskusage --server=$SRV" -vvv

    help
    help mysqldiskusage

    高可用性層面

    mysqlfailover
    - 提供對複製結構故障自動轉移
    - 使用GTID
    mysqlreplicate
    - 設定複製
    - 從一開始 當前 特定binlog pos複製
    mysqlrplms
    - 提供round-robin multi-source複製
    - 使用GTID
    mysqlrpladmin
    - 管理複製拓撲
    - 允許恢復主
    - 命令包括 select failover gtid health start stop switchover
    mysqlrplcheck
    - 檢查複製配置
    - 在主上測試二進位制日誌
    mysqlrplshow
    - 檢視從連線到的主
    - 可遞迴搜尋
    - 顯示覆制拓撲圖或列表
    mysqlrplsync
    - 檢查伺服器之間資料一致性
    - 使用GTID

    mysqlfailover

    mysqlfailover --master=root@localhost --discover-slaves-login=root --candidates=root@host123:3306,root@host456:3306

    對複製進行健康檢測和實現故障自動轉移
    需要gtid_mode=ON
    所有從必需使用--report-host 和 --report-port 啟動引數
    許使用者指定外部指令碼在切換和故障轉移命令之前或之後執行

    --failover-mode
    auto 執行故障自動轉移到第一候選人
    elect 與auto一樣,但若在指定候選從列表中沒有可行的,不檢查剩餘從,產生錯誤並退出
    fail 產生一個錯誤,不進行故障轉移

    mysqlreplicate

    mysqlreplicate --master=root@localhost:3306 --slave=root@localhost:3310 --rpl-user=rpl:passwd

    在兩臺伺服器間設定和啟動複製

    mysqlrplms

    mysqlrplms --slave=root@localhost:3306 --masters=root@localhost:3310,root@localhost:3311 --rpl-user=rpl:passwd

    設定多主單從的複製,即從多個主複製

    mysqlrpladmin

    mysqlrpladmin --slaves=root@localhost:3306 <command>

    MySQL複製的管理工具

    mysqlrplcheck

    mysqlrplcheck --master=root@localhost:3306 --slave=root@localhost:3310

    檢查複製的先決條件

    mysqlrplshow

    mysqlrplshow --master=root@localhost:3306

    顯示主從複製關係,並繪製主的圖形結構,標註每個主機名和埠

    mysqlrplsync

    mysqlrplsync --master=user:pass@host:port --slaves=user:pass@host:port [<db_name>[.<tbl_name>]]

    對複製同步進行檢查,檢查主從或從從之間的資料是否一致,並報告丟失的物件以及資料

     

    參考:https://blog.csdn.net/anzhen0429/article/details/78007341









    About Me

    ........................................................................................................................

    ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

    ● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

    ● 本文itpub地址: http://blog.itpub.net/26736162

    ● 本文部落格園地址: http://www.cnblogs.com/lhrbest

    ● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

    ● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

    ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

    ● DBA寶典今日頭條號地址:

    ........................................................................................................................

    ● QQ群號: 230161599 、618766405

    ● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

    ● 聯絡我請加QQ好友 646634621 ,註明新增緣由

    ● 於 2020-05-01 06:00 ~ 2020-05-30 24:00 在西安完成

    ● 最新修改時間:2020-11-19

    ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

    ● 版權所有,歡迎分享本文,轉載請保留出處

    ........................................................................................................................

    小麥苗的微店

    小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

    小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

    小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

    ........................................................................................................................

    使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

    ........................................................................................................................

    歡迎與我聯絡

     

     



    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2693273/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章