提示:本文内容是在 MySQL5.7.32 和 MySQL8.0.23 中使用 mysqldiff ,前面是使用及遇到的一些问题,后面是安装及遇到的一些问题;
MySQL8.0.23遇到的一些问题可以配合MySQL5.7.32版本进行调整并最终成功执行,8.0及以上版本的处理办法放在使用方法这块的结尾,安装和执行命令是相同的,不同的只有报错,根据提示,相应得到处理即可。
——使用:
当你已经安装成功之后(安装在后面),直接在命令行输入 mysqldiff 之后执行,会获得一个警告,而警告中就告诉你如何去使用这个工具了:
[root@MySQL-120 ~]# mysqldiff # WARNING: Using a password on the command line interface can be insecure. Usage: mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4 mysqldiff: error: No objects specified to compare.
完整的语法是:mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4
非常简单易懂,比如我自己将我本机的MySQL下的两个库进行比较,看看之间有什么不同:
[root@MySQL-120 ~]# mysqldiff --server1=root:123456@localhost --server2=root:123456@localhost test1:test2 # WARNING: Using a password on the command line interface can be insecure. # server1 on localhost: ... connected. # server2 on localhost: ... connected. # WARNING: Objects in server1.test1 but not in server1.test2: # TABLE: t2 # WARNING: Objects in server1.test2 but not in server1.test1: # TABLE: t3 # TABLE: t4 # Compare failed. One or more differences found.
信息显示了对比的两个库中的表有哪些差异,分别列出test1与test2之间相比较出现的差异表,当然有视图的话还会显示视图;
最后一句提示对比失败,是因为库中的表有差异,表示失败,并不是本身执行失败,若对比未出现差异,则是对比成功,显示 # Success. All objects are the same.
若要对比表的结构,使用database.table的形式对比:
注意:mysqldiff 会对库中的表是否存在以及表的结构进行对比,但不会去对比表中的数据,若表名表结构相同但数据有差异,依然会显示对比成功,表的结构发生差异,会显示出具体差异情况。
[root@MySQL-120 ~]# mysqldiff --server1=root:123456@localhost --server2=root:123456@localhost test1.t1:test2.t1 # WARNING: Using a password on the command line interface can be insecure. # server1 on localhost: ... connected. # server2 on localhost: ... connected. # Comparing test1.t1 to test2.t1 [FAIL] # Object definitions differ. (--changes-for=server1) # --- test1.t1 +++ test2.t1 @@ -1,4 +1,3 @@ CREATE TABLE `t1` ( - `id` int(11) DEFAULT NULL, - `name` varchar(20) DEFAULT NULL + `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 # Compare failed. One or more differences found.
关于MySQL8.0及以上版本执行命令时出现的各种报错:
1.遇到Authentication plugin ‘caching_sha2_password’ cannot be loaded:
root@localhost : mysql 11:31:01> alter user root@\'localhost\' identified with mysql_native_password by \'123456\'; Query OK, 0 rows affected (0.00 sec) root@localhost : mysql 11:31:48> flush privileges; Query OK, 0 rows affected (0.00 sec)
典型的MySQL5.x与8.0版本的差异错误,各种场景下遇到太多次了,密码的问题,直接修改密码的加密模式即可。
2.报错 mysql 中的 proc 和 event 表不存在:
两个表并不会一起提示,先会提示你 proc 不存在,之后再提示你 event 表不存在,一起解决就行了,方法就是从MySQL5.x的版本的数据库导出,之后导入8.0及以上的库
报错信息:ERROR: Query failed. 1146 (42S02): Table \'mysql.proc\' doesn\'t exist
ERROR: Query failed. 1146 (42S02): Table \'mysql.event\' doesn\'t exist
##从MySQL5.x版本的数据库进行导出,然后scp传给8.0的库 [root@localhost ~]# mysqldump -u root -p mysql event proc > event_proc.sql Enter password: [root@localhost ~]# scp event_proc.sql 192.168.1.120:/root/event_proc.sql.sql ##在8.0的库进行导入 [root@MySQL-120 ~]# mysql -u root -p mysql < event_proc.sql.sql Enter password: Warning (Code 3719): \'utf8\' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. ...... ##导入期间会警告提示,此为警告,是因为版本发生变化,UTF8的别名也发生了变化,不过数据会正常执行导入并成功完成 ##之后我们再执行则可以正常的进行比对了 [root@MySQL-120 ~]# mysqldiff --server1=root:123456@localhost --server2=root:123456@localhost test01:test02 # WARNING: Using a password on the command line interface can be insecure. # server1 on localhost: ... connected. # server2 on localhost: ... connected. # WARNING: Objects in server1.test01 but not in server1.test02: # TABLE: t01 # TABLE: t02 # Compare failed. One or more differences found.
此问题是由于MySQL8.0及以上的版本在mysql的库中没有 proc 和 event 这两个表,执行 mysqldiff 又需要它们,至于为什么个人没有去深入研究,反正解决了,哈哈!
——安装:
在官网下载 MySQL Utilities 工具软件本体( https://downloads.mysql.com/archives/utilities/ )
同时还需要在官网下载必要的依赖软件( https://downloads.mysql.com/archives/c-python/ )
这是目前我下载的版本,有特殊需求,可以选择其他版本:
[root@MySQL-120 ~]# ll mysql-* -rw-r--r-- 1 root root 247024 Mar 20 13:06 mysql-connector-python-2.1.7-1.el7.x86_64.rpm -rw-r--r-- 1 root root 856440 Mar 20 12:21 mysql-utilities-1.6.5-1.el7.noarch.rpm
注意:这里我是家里测试的,我个人的MySQL是8.0.23的版本,而最开始使用的是MySQL5.7.32的版本,我个人的8.0.23版本出现了异常报错;
所以将软件下载的版本降下来,不要下 mysql-connector-python-8.0.23 , 而是选择2.1.7 ;
[root@MySQL-120 ~]# mysqldiff Traceback (most recent call last): File "/usr/bin/mysqldiff", line 28, in <module> from mysql.utilities.common.tools import check_python_version ImportError: No module named utilities.common.tools
之后将两个rpm包进行安装
[root@MySQL-120 ~]# rpm -ivh mysql-connector-python-2.1.7-1.el7.x86_64.rpm warning: mysql-connector-python-2.1.7-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-connector-python-2.1.7-1.el################################# [100%] [root@MySQL-120 ~]# rpm -ivh mysql-utilities-1.6.5-1.el7.noarch.rpm warning: mysql-utilities-1.6.5-1.el7.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-utilities-1.6.5-1.el7 ################################# [100%]
安装时出现的各种报错:
1.当你直接安装 mysql-utilities 的时候报错:
[root@MySQL-120 ~]# rpm -ivh mysql-utilities-1.6.5-1.el7.noarch.rpm warning: mysql-utilities-1.6.5-1.el7.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.5-1.el7.noarch
注意:提示中还给显示了版本要 >= 2.0.0 。
2.当你安装 mysql-connector-python 的时候报错:
[root@MySQL-120 ~]# rpm -ivh mysql-connector-python-2.1.7-1.el7.x86_64.rpm warning: mysql-connector-python-2.1.7-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies: python-setuptools is needed by mysql-connector-python-2.1.7-1.el7.x86_64
注意:提示你需要一个叫做 python-setuptools 的软件包,有外网的情况下可以直接 yum install -y python-setuptools 进行安装。
3.还是当你安装 mysql-connector-python 的时候报错:
[root@MySQL-120 ~]# rpm -ivh mysql-connector-python-2.1.7-1.el7.x86_64.rpm warning: mysql-connector-python-2.1.7-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies: net-tools is needed by mysql-connector-python-2.1.7-1.el7.x86_64
注意:根据这个情况可以看出,你缺少了什么包,都会在报错中为你提示,比较好处理,直接找对应的进行下载安装就可以了。