在我的生产服务器(Debian 12)上,我有一个 mariadb 数据库“sasquatch_index”,它可以按预期使用一些与其交互的 python 脚本。我正在设置我的应用程序以在测试环境中工作,我想将此数据库复制到我的本地系统(Manjaro)。在我的生产服务器上,我使用类似
mariadb-dump -u [username] -p[password] sasquatch_index > ./site_dump.sql
的命令来创建 site_dump.sql 文件。我然后使用 rsync 从本地计算机检索此文件。我使用 mariadb -u [user] -p sasquatch_index < ~/site_dump.sql
在本地计算机上启动数据库。我可以通过 mariadb 客户端访问该数据库及其内容。到目前为止一切顺利。
然而,当我尝试使用任何现有的 python 脚本与本地计算机(我正在设置的测试环境)上的该数据库进行交互时,就会出现问题。所述脚本使用通过命令
pacman -S python-mysql-connector
安装的“mysql.connector”模块。例如,search.py 的存在是为了对数据库执行复杂的搜索。它通过像 search.py -s "hello world"
这样的命令运行,并返回如下错误输出:
Error connecting to database: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
Traceback (most recent call last):
File "/home/josh/git/github/search-sasquatch/./search.py", line 270, in <module>
main()
File "/home/josh/git/github/search-sasquatch/./search.py", line 262, in main
results = performSearch(arguments['searchString'], arguments['safe'], creds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/josh/git/github/search-sasquatch/./search.py", line 185, in performSearch
if conn is not None and conn.is_connected():
^^^^
UnboundLocalError: cannot access local variable 'conn' where it is not associated with a value
(请注意输出中与“未知排序规则”相关的部分。名为“conn”的变量的值取决于是否成功连接到数据库。)
出现“未知排序规则”错误的另一个实例是尝试使用其中另一个 python 脚本时。这个特殊的“extractor.py”将新数据附加到“sasquatch_index”数据库表中名为“sites”的表中。在本地系统上运行此脚本的输出如下所示:
Parsing https://example.com/index.php...
Error updating the database for url 'https://example.com/index.php': 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
Parsing https://josh.example.com...
Error updating the database for url 'https://josh.example.com': 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
这些脚本在生产环境中按照预期完美运行,但在本地,它们会产生这样的错误。
我尝试修改在生产服务器上运行的命令以明确不使用排序规则“utf8mb4_0900_ai_ci”,即
mariadb-dump --default-character-set=utf8mb --skip-set-charset -u [user] -p[password] sasquatch_index > site_dump.sql
我还在“site_dump.sql”文件中搜索了字符串“utf8mb4_0900_ai_ci”,并发现该文本从未出现在该文件中。一直以来这些错误仍然发生。
最近,我尝试在不导入任何内容的情况下运行“extractor.py”(我使用项目中的其他脚本创建了数据库和表),但我仍然遇到相同的错误。 “extractor.py”仍然无法将任何数据添加到站点表中。