MySQL 官方工具utilities介紹

lhrbest發表於2020-05-20

MySQL 官方工具utilities介紹



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 https://repo.mysql.com//mysql80-community-release-el7.rpm  # linux7
# rpm -Uvh https://repo.mysql.com//mysql80-community-release-el6.rpm  # linux6
yum remove mysql-connector-python -y
#centos 7
rpm -Uvh http://repo.mysql.com/yum/mysql-connectors-community/el/7/x86_64/mysql-connector-python-2.1.8-1.el7.x86_64.rpm
#centos 6
rpm -Uvh http://repo.mysql.com/yum/mysql-connectors-community/el/6/x86_64/mysql-connector-python-2.1.8-1.el6.x86_64.rpm
yum install -y mysql-utilities


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

二進位制安裝

yum install mysql-connector-python
wget https: //cdn .mysql.com /archives/mysql-utilities/mysql-utilities-1 .6.5. tar .gz
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 https: //cdn .mysql.com //Downloads/Connector-Python/mysql-connector-python-2 .1.7-1.el7.x86_64.rpm
 
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 http://repo.mysql.com/yum/mysql-connectors-community/el/6/x86_64/mysql-connector-python-2.1.8-1.el6.x86_64.rpm

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管理工具集
下載地址: https://downloads.mysql.com/archives/utilities/
當前版本1.6.5  https://downloads.mysql.com/archives/get/file/mysql-utilities-1.6.5-1.el7.noarch.rpm
二進位制包: https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
二進位制包: https://downloads.mysql.com/archives/get/file/mysql-utilities-1.6.5.tar.gz

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 https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/m/mysql-connector-python-1.1.6-1.el7.noarch.rpm
yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/m/mysql-utilities-1.3.6-1.el7.noarch.rpm
# 解除安裝
yum -y remove mysql-connector-python
# 安裝 1.6.5 版本 二進位制方式
最新版本 1.6.5 建議使用二進位制安裝(tar包中自帶connector無需單獨安裝)
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
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寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

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

● QQ群號: 230161599 、618766405

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

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

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

● 最新修改時間:2020-05-01 06:00 ~ 2020-05-30 24:00

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

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

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

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章