ClickHouse创建MySql引擎报错(Code: 501)
日常踩坑,记录问题解决思路及过程!
最近工作中用到ClickHouse,并且需要同步MySql数据库中的数据,因此就想到使用ClickHouse的MySql数据库引擎,结果“勇敢的少年,倒在了第一步”。在ClickHouse客户端执行下面的Sql时报错了
CREATE DATABASE practice ENGINE = MySQL('IP:PORT','practice','用户名', '密码');
报错信息如下:
Received exception from server (version 21.6.3):
Code: 501. DB::Exception: Received from localhost:9000. DB::Exception: Cannot create MySQL database, because Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Connections to all replicas failed: practice@192.168.164.78:3306 as user root,
说明:ClickHouse是在本机适用Docker安装,MySql是在本机直接安装。
看到报错后,第一反应是Docker容器与本机网络不同(事实这个猜想是错误的😂),但是为了排除这个原因,必须得坚持验证一下,这样才能说服自己,再去找其他原因。
对于程序员来说,验证网络是否通,那不是小菜一碟,直接干! telnet
哎,Docker容器中竟然没有安装telnet,好吧!自己安装一下
apt-get update
apt-get install telnet
两行命令搞定!执行telnet
到这里,网络不通猜想明显是错误的。其实回头想想,也不可能是网络的问题,同一台物理机,肯定是不存在网络的问题。
telnet没有到原因,但是看到下面重要的信息
GHost '192.168.164.78' is not allowed to connect to this MySQL serverConnection closed by foreign host.
翻译过来的大概意思:MySql服务不允许外部主机(foreign host)访问。
一下子,就明朗了。原来是Mysql服务权限设置的问题导致的,依稀的记得当初在安装mysql好像是有设置过用户、IP权限的。查阅资料,需要修改用户、IP权限。
可以从mysql库中的user表看到,目前只有localhost这一个host授权,那要解决问题,只需要给相关用户和IP授权即可。
创建用户并指定多IP访问
1. 创建用户并设置密码模式
CREATE USER '用户名'@'IP' IDENTIFIED WITH mysql_native_password BY '密码';
2.给创建的账号赋权
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'ip';
如果需要指定权限,就将ALL改为SELECT DELETE UPDATE INSERT等四种权限任选即可;另外可以将IP替换为'%',表示所有IP授权。
修改权限后,执行创建MySql引擎。
执行成功!
感谢阅读!