如何通过Python连接QNAP上WordPress的MariaDB 10数据库并创建新库?
解决方案:Python连接QNAP MariaDB并创建数据库供WordPress访问
一、先解决IP连接失败的问题
连接失败大概率是权限或网络配置问题,按以下步骤排查:
开放MariaDB远程访问权限
QNAP上的MariaDB默认只允许本地访问,需给数据库用户授权远程连接:- 通过SSH登录QNAP,执行
mysql -u root -p并输入数据库密码进入命令行。 - 运行授权命令(替换为你的用户名和密码):
这里的GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES;%允许任意IP访问,若要更安全,可替换为你的PC固定IP。
- 通过SSH登录QNAP,执行
检查QNAP防火墙
进入QNAP控制面板的防火墙设置,确保开放了3306端口(MariaDB默认端口),并允许你的PC IP访问该端口。修改MariaDB绑定地址
找到QNAP上MariaDB的配置文件(通常路径为/etc/mysql/my.cnf或对应版本的子目录),将bind-address的值从127.0.0.1改为0.0.0.0(允许所有IP)或你的PC固定IP,然后重启MariaDB服务。
二、Python代码实现:自动创建数据库并写入数据
使用mysql-connector-python库操作数据库,先通过pip install mysql-connector-python安装依赖。
import mysql.connector from mysql.connector import Error # 替换为你的实际配置 DB_CONFIG = { 'host': 'QNAP的IP地址', 'user': 'MariaDB用户名', 'password': 'MariaDB密码', 'port': 3306 } TARGET_DB = 'wp_custom_data' # 自定义数据库名 def init_custom_database(): try: # 先连接到MariaDB服务器(不指定数据库) conn = mysql.connector.connect(**DB_CONFIG) if conn.is_connected(): cursor = conn.cursor() # 检查数据库是否存在 cursor.execute(f"SHOW DATABASES LIKE '{TARGET_DB}'") if not cursor.fetchone(): # 创建符合WordPress编码的数据库 cursor.execute(f"CREATE DATABASE {TARGET_DB} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") print(f"数据库 {TARGET_DB} 创建成功") else: print(f"数据库 {TARGET_DB} 已存在") # 可选:创建WordPress专用访问用户(推荐) # cursor.execute("GRANT SELECT, INSERT, UPDATE ON wp_custom_data.* TO 'wp_custom_user'@'localhost' IDENTIFIED BY '你的密码'") # cursor.execute("FLUSH PRIVILEGES") cursor.close() conn.close() except Error as e: print(f"数据库操作错误: {str(e)}") # 初始化数据库 init_custom_database() # 数据插入示例(根据你的需求调整) def insert_data(data_tuple): try: db_config = DB_CONFIG.copy() db_config['database'] = TARGET_DB conn = mysql.connector.connect(**db_config) if conn.is_connected(): cursor = conn.cursor() # 替换为你的表结构和插入语句 insert_sql = "INSERT INTO custom_table (title, content) VALUES (%s, %s)" cursor.execute(insert_sql, data_tuple) conn.commit() print(f"成功插入{cursor.rowcount}条数据") cursor.close() conn.close() except Error as e: print(f"插入数据失败: {str(e)}") # 调用示例 # insert_data(('测试标题', '测试内容'))
三、配置WordPress访问新数据库
WordPress默认使用自身数据库,要读取新创建的库,可通过主题代码实现:
在当前主题的functions.php中添加以下代码(替换为你的用户和数据库信息):
// 连接自定义数据库 function get_custom_db_connection() { // 参数:用户名、密码、数据库名、主机(WordPress在QNAP本地,用localhost即可) $custom_db = new wpdb('wp_custom_user', '你的密码', 'wp_custom_data', 'localhost'); if ($custom_db->last_error) { error_log('自定义数据库连接失败: ' . $custom_db->last_error); return false; } return $custom_db; } // 使用示例:在主题模板中调用获取数据 // $db = get_custom_db_connection(); // if ($db) { // $data = $db->get_results("SELECT * FROM custom_table"); // // 处理并输出数据 // }
四、安全与优化建议
- 避免使用
root用户进行Python和WordPress的数据库连接,创建专用用户并分配最小必要权限(比如Python仅需创建库、插入数据权限,WordPress仅需读取权限)。 - 保持数据库字符集为
utf8mb4,与WordPress默认一致,防止中文或特殊字符乱码。 - QNAP重启后,确认MariaDB服务自动启动,防火墙规则未被重置。
内容的提问来源于stack exchange,提问作者Morten Skerra
相关产品推荐
相关产品推荐

