Я столкнулся со странной проблемой при установке MySQL на Linux.
Я пытался настроить MySQL в качестве базы данных для работы с Airflow. Ниже представлены мои конфигурации:
Operating System: Red Hat Enterprise Linux Server 7.7
python 3.7.2
anaconda 3
spark 2.45
Я могу подключиться к MySQL, но при выполнении команды airflow initdb возникает ошибка. Не уверен, почему возникает эта ошибка, но, безусловно, только из-за MySQL.
Ошибка:
[2020-04-09 05:19:00,990] {settings.py:253} INFO - settings.configure_orm(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=15499
Traceback (most recent call last):
File "/home/npa/anaconda3/envs/python3.7.6/bin/airflow", line 25, in <module>
from airflow.configuration import conf
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/airflow/__init__.py", line 47, in <module>
settings.initialize()
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/airflow/settings.py", line 377, in initialize
configure_orm()
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/airflow/settings.py", line 266, in configure_orm
engine = create_engine(SQL_ALCHEMY_CONN, **engine_args)
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/sqlalchemy/engine/__init__.py", line 479, in create_engine
return strategy.create(*args, **kwargs)
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
return __import__("MySQLdb")
File "/home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
import _mysql
ImportError: /home/npa/anaconda3/envs/python3.7.6/lib/python3.7/site-packages/_mysql.cpython-37m-x86_64-linux-gnu.so: symbol mysql_real_escape_string_quote, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference
Решил проблему, создав символическую ссылку на библиотеку. Т.е.
Фактическая библиотека находится в
/usr/local/mysql/lib
Затем я создал символическую ссылку в
/usr/lib
Используя команду:
sudo ln -s /usr/local/mysql/lib/libmysqlclient_18 /usr/lib/libmysqlclient_18
так что у меня есть следующее отображение:
ls -l libmysqlclient_18
lrwxr-xr-x 1 root wheel 44 16 Jul 14:01 libmysqlclient_18 -> /usr/local/mysql/lib/libmysqlclient_18
Я пробовал все, но, наконец, мне пришлось удалить все с сервера и снова установить анаконду и MySQL, чтобы исправить проблему.
Наконец, я получил команды от SO, которые работали. по некоторым причинам MySQL был поврежден и не удалялся должным образом. Вот несколько из них, которые наконец-то сработали и полностью удалили MySQL из моей системы.
yum remove mysql-server
pkill mysqld; pkill mysqld_safe
rpm -qa | grep mysql
yum remove <name displayed in above step-1>
sudo -H pip uninstall mysqlclient
sudo -H pip install --no-binary mysqlclient mysqlclient
rm -rf ~/anaconda3
conda install anaconda-clean
anaconda-clean
После этого я снова установил и настроил анаконду и MySQL, и проблема была решена.