baodeyun 发表于 2018-10-18 13:21:00

mysql的mysql-utilities工具的使用

mysql-utilities的安装

1.yum安装

rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

yum install mysql-utilities -y

2.源码包安装:



tar xf mysql-connector-python-2.1.7.tar.gz

cd mysql-connector-python-2.1.7

python setup.py build

python setup.py install

tar xf mysql-utilities-1.6.5.tar.gz

cd mysql-utilities-1.6.5

python setup.py build

python setup.py install

连接mysql的方法:

1.login-paths:加密不可见的

生成加密文件:

格式:

login-path=name --host=localhost(默认) --user=   --port=--socket=--password

port和socket是可选项,二者指定一个就行

生成加密文件时,至少指定一个用户、一个主机名、一个port或者一个socket

./mysql_config_editor set --login-path=instance-3306 --host=localhost --user=root --port=3306 --password

查看加密文件信息

/usr/local/mysql/bin/mysql_config_editor print --login-path=instance-3306


user = root
password = *****
host = localhost
port = 3306

一旦配置就只需要指定.mylogin.cnf文件中的服务器段进行连接,

/usr/bin/mysqlserverinfo --srever=instance-3306 --format=vertical

参数:

--server :指定上面的.mylogin.cnf文件的名称,例如:instance

--format : 显示输出的结果格式,默认是网格,这里使用垂直格式

======================================================================



mysqldbcompare命令的使用

首先授权

grant create temporary tables,select,insert,super,update,delete,process,replication slave on *.* to root@'192.168.0.%' identified by '123';

mysqldbcompare --server1=root:pwssword@127.0.0.1:3006 --server2=root:password@127.0.0.1:3006 dbname:dbname --changes-for=server1 --difftype=sql

两个库的比较:

mysqldbcompare --server1=root:123@127.0.0.1:3306 db1:db2 --changes-for=server1 --difftype=sql

参数:

db1:db2:这是一台mysql服务器的两个库的比较;

--changes-for : 控制着差异报告,还是转换报告,

--changes-for=server1 :针对server1,以server2为参照物

--changes-for=server2: 针对server2,以server1为参照物

--difftype : 指定不同的显示格式(sql|differ|context|unified)选项生产差异的SQL语句

--disable-binary-logging :如果开启了二进制日志,不想比较日志,则添加这个选项;

--run-all-tests :首次发现差异时不中止

-all :检测所有的库

1.首先:创建mysql的索引

2.其次才能使用mysqldbcompare命令修改

mysqldbcompare --server1=root:123@127.0.0.1 --server2=root:123@192.168.1.183 yjzh:yjkj --changes-for=server1 --difftype=sql --run-all-tests

本地两个库的对比

mysqldbcompare --server1=root123@localhost yjkj:yjzh --run-all-tests

mysqldbcompare --server1=instance-3306 --server2=root:123@192.168.1.83:3306yjkj:text --changes-for=server1--run-all-tests --difftype=sql --show-reverse -vvv

参数:

--difftype=sql 选项生产差异的SQL语句,同时,使用 --show-reverse选项可以显示出双方的SQL语句

mysqldbcopy的用法:

同一台服务器进行拷贝,库的名称不能一样

mysqldbcopy --source=instance-3306 --destination=instance-3306 yjkj:yjkj_copy -vvv --drop-first --locking=lock-all

参数:

--locking=:进行锁库参数有no-lock(不使用任何表锁)   lock-all(使用表锁,无事务和一致性读) snapshot(默认,单一事务的一致性读)

--source=:指定源数据库

--distination=: 制定目标数据库

--drop-first: 删除新的后者已经存在的库

在两台服务器上进行数据库的拷贝(在源地址上开启二进制日志)

192.168.1.83

# mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=root:123@localhost:3306 yjkj:text -vvv --drop-first --locking=lock-all --rpl=master --rpl-user=root

参数:

-vvv :操作的详细过程

--rpl= :指定角色,master、slave

--rpl-user= :选项指定复制的用户名和密码

mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306 yjkj:tt -vvv --drop-first --locking=lock-all --rpl=master --rpl-user=root

当所在的服务器作为目标地址的时候

--destination= 可以使用mysql_config_editor生成的加密文件信息,上例中的install_3306

如果要复制的数据库的服务器上启用了GTIDs(GTID_MODE = ON),如果只复制其中一部分数据库,将会有警告信息产生。这是因为GTID报表生成包括所有数据库的gtids,不仅仅是某个的。

如果有启用GTID,但是使用了--skip-gtid也会收到警告。

如果启用了GTID,最好是复制所有的数据库。

当复制数据和包含GTID命令,可能会遇到"GTID_PURGED can only be set when GTID_EXECUTED is empty"错误。产生的原因是目标服务器不是一个干净的复制状态。解决办法是在复制之前,先在目标服务器上执行 RESET MASTER 命令,清空复制状态

3.不想拷贝库中的一个表

mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306-vvv --exclude=yjkj.upyjkj:text

参数:

--exclude=: 指定哪个库那张表不拷贝

4.可以使用正则

mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306-vvv --regexp --exclude=^u yjkj:text --drop-first

解释:默认情况下是LIKE匹配。使用正则,需要指定--regexp选项,同时,正则表达式只需写对象的匹配模式,不必加上数据库名

mysqldbcopy命令所需要的权限

源服务器:SELECT, SHOW VIEW, EVENT ,TRIGGER

目标服务器:CREATE, ALTER, SELECT, INSERT, UPDATE, LOCK TABLES, DROP,SUPER权限取决于对象DEFINER的值。

如果在复制过程中出现错误,复制中止了,目标数据库可能不一致了。在这种情况下,删除已复制的数据库,修复失败的原因,然后再次复制。


mysqldbcopy改变存储引擎

将新拷贝的数据库在目标服务器上使用MyISAM引擎,只需使用 --new-storage-engine

mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306-vvv --regexp --exclude=^u yjkj:text --new-storage-engine=myisam --drop-first




mysqldbexport导出命令的使用

192.168.1.24

只导出定义语句

mysqldbexport --server=instance-3306 --format=sql yjkj --export=definitions > data.sql

参数:

--format :导出的格式

只导出数据,且是批量插入语句

mysqldbexport --server=install_3306--format=sql yjkj --export=data --bulk-insert

参数:   --bulk-insert: 批量插入

如果导出的库中表的引擎并不是单一的,为了确保数据的一致性,到处前需要锁表,加上参数--locking=lock-all

为当前的数据库创建一个从服务器

mysqldbexport --server=instance_3306--format=sqlttlsa_com --export=both --rpl-user=root--rpl=master

# Connecting to the current server as master
CHANGE MASTER TO MASTER_HOST = 'localhost', MASTER_USER = 'root', MASTER_PASSWORD = '', MASTER_PORT = 3306, MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 120;
START SLAVE;

在新的服务器上执行上面的命令

mysqldbimport 导出命令的使用

mysqldbimport --server=instance-3306 --import=definitions --format=sql data.sql

如果创建的新的主从,在导入数据的时候要先执行'reset master'


mysqldiff:用来比较对象的定义是否相同并显示不同的地方,mysqldiff 是通过对象名称来进行比较的,如果比较数据是否相同则使用mysqldbcompare

不同服务器的两个库进行比较

mysqldiff --server1=instance-3306 --server2=root:123@192.168.1.83:3306yjkj:yjkj --difftype=sql --show-reverse -vvv

mysqldiff --server1=instance-3306 --server2=root:123@192.168.1.83:3306yjkj:text --changes-for=server2 --difftype=sql --show-reverse -vvv

同台服务器的两个库进行比较

mysqldiff --server1=instance-3306 yjkj:yjkj_copy --difftype=sql --show-reverse -vvv

参数:

--show-reverse :生成包含SQL语句的转换报告,以转换反向定义的对象定义,




















页: [1]
查看完整版本: mysql的mysql-utilities工具的使用