MySQL 官方工具utilities介紹
MySQL 官方工具utilities介紹
mysql-utilities 是python編寫 MySQL官方版的命令列工具集,涵蓋主從校驗,主從建立,主從切換等等
https://dev.mysql.com/doc/workbench/en/wb-mysql-utilities.html
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
二進位制安裝
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出現錯誤
可能模組沒有在搜尋路徑中
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管理工具集
下載地址:
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
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檔案恢復資料,因為資料庫儲存的資料實際上還是儲存在檔案裡的
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 --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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】二、Innodb 恢復工具介紹MySql
- MySql介紹MySql
- mytop 使用介紹 mysql實時監控工具MySql
- MySQL壓測工具mysqlslap的介紹與使用MySql
- MYTFA(MYSQL 診斷資訊收集工具)介紹MySql
- MySQL Binlog 介紹MySql
- MySQL MVCC介紹MySqlMVC
- mysql MVCC 介紹MySqlMVC
- MySQL索引介紹MySql索引
- SOLIDWORKS 2018官方正版功能介紹Solid
- SOLIDWORKS 2015官方正版功能介紹Solid
- etcdctl工具介紹
- 介紹幾種MySQL常見的圖形化工具MySql
- Smart Disk Image Utilities for mac(磁碟映象工具)Mac
- SpringBoot的官方英文介紹(中文譯本)Spring Boot
- SOLIDWORKS 2022官方正版新功能介紹Solid
- MySQL group replication介紹MySql
- MySQL 安裝介紹MySql
- MySQL檢視介紹MySql
- uml建模工具介紹
- MySQL 8.0 目錄介紹MySql
- MySQL MRR和ICP介紹MySql
- MySQL 8.0 新增特性介紹MySql
- MySQL觸發器介紹MySql觸發器
- MySql主從同步介紹MySql主從同步
- MySQL角色(role)功能介紹MySql
- MySQL 教程基礎介紹MySql
- 原型設計工具介紹原型
- DriverStudio工具包介紹
- certutil工具的使用介紹
- Smart Disk Image Utilities for mac(磁碟映象工具)啟用Mac
- MySQL資料庫鎖介紹MySql資料庫
- MySQL 延遲從庫介紹MySql
- mysql中SQL的概念介紹MySql
- MySQL審計外掛介紹MySql
- 主流原型設計工具介紹(●´ϖ`●)原型
- 主流原型設計工具介紹原型
- 11_Oracle bbed工具介紹Oracle