MySQL Utilities之数据库层面常用命令

1.1 mysqldbcompare

[root@zijie data]# mysqldbcompare --server1=master57 --server2=slave57 --all -v
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.
# Comparing databases: employees, zijie
# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.
# Checking databases employees on server1 and employees on server2
#
ERROR: The list of objects differs among database employees and employees.

# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.
# Checking databases zijie on server1 and zijie on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     t1                                      pass    pass    -
#           - Compare table checksum                                pass

# Definition for object zijie.t1:
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

# Definition for object zijie.t1:
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4



# Database consistency check failed.
#
# ...done

  比较两个数据库对象的差异,包括表、视图、触发器、存储过程、函数、事件
比较检测的步骤:
1、数据库定义,确保数据库存在,若不存在,不需要下一步检测
2、数据库对象,–skip-object-compare跳过
3、对象定义,比较create语句,–skip-diff跳过
4、检测表行数,仅检查行数是否一致,–skip-row-count跳过
5、表数据一致性,先全表checksum校验,然后找出不同 --skip-checksum-table跳过表校验,–skip-data-check跳过数据检查

1.2 mysqldbcopy

  从源服务器上复制一个数据库到另一个目标服务器上,源服务器和目标服务器可以是同一台,数据库名字可相同也可不同。希望复制的新库或新的服务器改变存储引擎,在这种情况下,使用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。

[root@zijie data]# mysqldbcopy --source=master57 --destination=slave57 --drop-first --all
# Source on 127.0.0.1: ... connected.
# Destination on 127.0.0.1: ... connected.
# Including all databases.
# GTID operation: SET @MYSQLUTILS_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
# GTID operation: SET @@SESSION.SQL_LOG_BIN = 0;
# GTID operation: SET @@GLOBAL.GTID_PURGED = '2a4aaa93-98e4-11ea-b9b2-00163e0c8a51:1-8';
# Copying database zijie
# Copying TABLE zijie.t1
# Copying data for TABLE zijie.t1
# GTID operation: SET @@SESSION.SQL_LOG_BIN = @MYSQLUTILS_TEMP_LOG_BIN;
#...done.


[root@zijie data]# mysqldbcopy --source=master57 --destination=slave57 test:testslave
# Source on 127.0.0.1: ... connected.
# Destination on 127.0.0.1: ... connected.
# WARNING: A partial copy from a server that has GTIDs enabled will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to generate the GTID statement, use the --skip-gtid option. To export all databases, use the --all option and do not specify a list of databases.
# GTID operation: SET @MYSQLUTILS_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
# GTID operation: SET @@SESSION.SQL_LOG_BIN = 0;
# GTID operation: SET @@GLOBAL.GTID_PURGED = '2a4aaa93-98e4-11ea-b9b2-00163e0c8a51:1-9';
# Copying database test renamed as testslave
# GTID operation: SET @@SESSION.SQL_LOG_BIN = @MYSQLUTILS_TEMP_LOG_BIN;
#...done.


[root@zijie data]# mysqldbcopy --source=master57 --destination=slave57 --rpl-user=repl:repl --repl='master' --all
# Source on 127.0.0.1: ... connected.
# Destination on 127.0.0.1: ... connected.
# Including all databases.
# GTID operation: SET @MYSQLUTILS_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
# GTID operation: SET @@SESSION.SQL_LOG_BIN = 0;
# GTID operation: SET @@GLOBAL.GTID_PURGED = '2a4aaa93-98e4-11ea-b9b2-00163e0c8a51:1-9';
# Copying database test
# Copying database zijie
# Copying TABLE zijie.t1
# Copying data for TABLE zijie.t1
# GTID operation: SET @@SESSION.SQL_LOG_BIN = @MYSQLUTILS_TEMP_LOG_BIN;
# Connecting to the current server as master
#...done.

1.3 mysqldbexport

导出数据

选项:
–file-per-table 每个表单独保存,格式,db.table.csv
–rpl 和 --rpl-user 包含主从同步语句 --comment-rpl 注释主从语句

权限:
源服务器 select,show view mysql数据库的select

[root@zijie test]# mysqldbexport --server=master57 --rpl=master  --format=sql zijie --export=data --bulk-insert --comment-rpl --file-per-table
# Source on 127.0.0.1: ... connected.
# WARNING: A partial export from a server that has GTIDs enabled will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to generate the GTID statement, use the --skip-gtid option. To export all databases, use the --all and --export=both options.
# STOP SLAVE;
# SET @MYSQLUTILS_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
# SET @@SESSION.SQL_LOG_BIN = 0;
# SET @@GLOBAL.GTID_PURGED = '2a4aaa93-98e4-11ea-b9b2-00163e0c8a51:1-9';
USE `zijie`;
# Exporting data from `zijie`
# Writing table data to files.
# The following are sample SOURCE commands. If needed correct the path to match files location.
# SOURCE zijie.t1.sql
#...done.
# SET @@SESSION.SQL_LOG_BIN = @MYSQLUTILS_TEMP_LOG_BIN;
# Connecting to the current server as master
# WARNING: No --rpl-user specified and multiple users found with replication privileges.
# CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_PASSWORD = '', # MASTER_USER = '', # MASTER_PASSWORD = '', MASTER_PORT = 3306, MASTER_AUTO_POSITION=1;
# START SLAVE;

mysqldbexport --server=master57 --format=sql zijie --export=definitions > zijie.sql

mysqldbexport --server=master57 --format=sql zijie --export=both > zijie123.sql

1.4 mysqldbimport

  导入数据,若一个对象已经存在于目标服务器上,将先删除再导入

选项:
– 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=slave57 --import=both --bulk-insert --format=sql zijie123.sql

1.5 mysqldiff

  比较对象定义是否相同,不能比较数据是否一致

[root@zijie test]# mysqldiff --server1=master57 --server2=slave57 zijie --difftype=sql --show-reverse -vvv
# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.

# Definition for object zijie:
CREATE DATABASE `zijie` /*!40100 DEFAULT CHARACTER SET utf8mb4 */

# Definition for object zijie:
CREATE DATABASE `zijie` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
# Comparing `zijie` to `zijie`                                     [PASS]

# Definition for object zijie.t1:
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

# Definition for object zijie.t1:
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
# Comparing `zijie`.`t1` to `zijie`.`t1`                           [PASS]

# Definition for object zijie.t2:
CREATE TABLE `t2` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

# Definition for object zijie.t2:
CREATE TABLE `t2` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
# Comparing `zijie`.`t2` to `zijie`.`t2`                           [PASS]
# Success. All objects are the same.

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/107702765