设为首页 收藏本站
查看: 1891|回复: 0

[经验分享] mysql的mysql-utilities工具的使用

[复制链接]
累计签到:67 天
连续签到:1 天
发表于 2018-10-18 13:21:00 | 显示全部楼层 |阅读模式
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

[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:3306  yjkj: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

[root@localhost ~]# 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.up  yjkj: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=sql  ttlsa_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:3306  yjkj:yjkj --difftype=sql --show-reverse -vvv

mysqldiff --server1=instance-3306 --server2=root:123@192.168.1.83:3306  yjkj: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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623237-1-1.html 上篇帖子: MySQL里的set global wait_timeout 下篇帖子: Linux下配置mysq的主从模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表