远程连接MySQL数据库(多种方法)

打印 上一主题 下一主题

主题 582|帖子 582|积分 1746

远程连接MySQL数据库(多种方法)

1、授权连接到MySql

确保电脑上有mysql服务器,才可以进行如下操作
步骤1:设置服务器

设置MySQL服务器允许远程连接:

1、修改服务器设置文件:
  1. sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
复制代码
2、解释或修改 bind-address 行:
  1. # bind-address = 127.0.0.1
  2. bind-address = 0.0.0.0
复制代码
3、重启 MySQL 服务:
  1. sudo systemctl restart mysql
复制代码
创建用户授权访问:

1、连接到 MySQL 服务器:
  1. mysql -u root -p
复制代码
2、创建用户并授予权限:
  1. CREATE USER 'yourusername'@'%' IDENTIFIED BY 'yourpassword';
  2. GRANT ALL PRIVILEGES ON yourdatabase.* TO 'yourusername'@'%' WITH GRANT OPTION;
  3. FLUSH PRIVILEGES;
复制代码
  1. -- 创建一个新的 MySQL 用户
  2. CREATE USER 'xiaozhou'@'%' IDENTIFIED BY 'securepassword';
  3. -- 授予新用户对 car_door 数据库的所有权限
  4. GRANT ALL PRIVILEGES ON car_door.* TO 'xiaozhou'@'%' WITH GRANT OPTION;
  5. -- 刷新权限使更改生效
  6. FLUSH PRIVILEGES;
复制代码
3、防火墙设置:允许流量通过端口3306(一般都为3306)
  1. sudo ufw allow 3306/tcp
  2. sudo ufw reload
复制代码
步骤2:设置应用程序:

在应用程序中,使用新创建的用户和暗码进行数据库连接:
  1. config = {
  2.     'user': 'xiaozhou',
  3.     'password': 'securepassword',
  4.     'host': 'your_server_ip_or_hostname',
  5.     'database': 'car_door'
  6. }
  7. def create_connection():
  8.     try:
  9.         cnx = mysql.connector.connect(**config)
  10.         return cnx
  11.     except mysql.connector.Error as err:
  12.         if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
  13.             print("用户名或密码错误")
  14.         elif err.errno == errorcode.ER_BAD_DB_ERROR:
  15.             print("数据库未创建")
  16.         else:
  17.             print(err)
  18.         return None
复制代码
2、通过脚本去设置远程访问

第一种方法的缺点在于每次添加一个访问授权就要团体操作一遍,这里提出用脚本在主机上更新授权用户,留意:进行的授权只能在选定的服务器上运行,脚本也只能设置在服务器上运行
1、JSON文件准备

准备一个JSON文件,用于填写用户信息,以后每次修改直接修改JSON文件即可,大概以后可以使用一些方法远程修改文件。这里我的JSON文件定名为:db_users.json
  1. {
  2.     "users": [
  3.         {
  4.             "username": "user_name",       // 要创建的用户名
  5.             "password": "securepassword",      // 用户的密码
  6.             "host": "%",                       // 用户可以从哪些主机连接到 MySQL 服务器
  7.             "database": "database",            // 用户有权限访问的数据库
  8.             "privileges": "ALL PRIVILEGES"     // 用户在指定数据库上的权限
  9.         },
  10.         {
  11.             "username": "another_user",        // 另一个要创建的用户名
  12.             "password": "anotherpassword",     // 用户的密码
  13.             "host": "%",                       // 用户可以从哪些主机连接到 MySQL 服务器
  14.             "database": "another_database",    // 用户有权限访问的数据库
  15.             "privileges": "SELECT, INSERT"     // 用户在指定数据库上的权限
  16.         }
  17.     ]
  18. }
复制代码
2、通过python脚本对JSON文件进行读取

编写一个 Python 脚本 generate_sql_from_json.py 来读取 JSON 文件,并生成包罗 SQL 语句的 grant_privileges.sql 文件,因为SQL更新需要用到MySQL文件,不能直接读取JSON,这里去进行转化:
  1. import json
  2. import os
  3. def generate_sql_from_json(json_file, output_sql_file):
  4.     json_file = os.path.join(os.path.dirname(__file__), json_file)  # 使用绝对路径
  5.     with open(json_file, 'r') as file:
  6.         user_data = json.load(file)
  7.    
  8.     sql_statements = []
  9.     for user in user_data['users']:
  10.         create_user = f"CREATE USER IF NOT EXISTS '{user['username']}'@'{user['host']}' IDENTIFIED BY '{user['password']}';"
  11.         grant_privileges = f"GRANT {user['privileges']} ON {user['database']}.* TO '{user['username']}'@'{user['host']}' WITH GRANT OPTION;"
  12.         sql_statements.append(create_user)
  13.         sql_statements.append(grant_privileges)
  14.    
  15.     sql_statements.append("FLUSH PRIVILEGES;")
  16.    
  17.     with open(output_sql_file, 'w') as file:
  18.         for statement in sql_statements:
  19.             file.write(statement + '\n')
  20.    
  21.     print(f"SQL statements written to {output_sql_file}")
  22. if __name__ == "__main__":
  23.     generate_sql_from_json('db_users.json', 'grant_privileges.sql')
复制代码
3、执行脚本

在每次更新 JSON 文件后,可以运行这个脚本来生成新的 grant_privileges.sql 文件。然后,将生成的 SQL 文件导入 MySQL 服务器:
  1. python3 generate_sql_from_json.pymysql -u root -p
  2. < grant_privileges.sql
复制代码
4、自动运行脚本

假如照旧感觉贫苦,可以创建一个自动运行代码的脚本,创建名为:update_sql_user.sh的脚本然后设置脚本定期运行:
  1. #!/bin/bash
  2. # 设置路径
  3. JSON_FILE="/path/to/db_users.json"
  4. PYTHON_SCRIPT="/path/to/generate_sql_from_json.py"
  5. SQL_FILE="/path/to/grant_privileges.sql"
  6. # MySQL 配置
  7. MYSQL_USER="root"
  8. MYSQL_PASSWORD="your_root_password"
  9. MYSQL_HOST="localhost"
  10. # 运行 Python 脚本生成 SQL 文件
  11. /usr/bin/python3 $PYTHON_SCRIPT
  12. # 检查 SQL 文件是否生成成功
  13. if [ -f "$SQL_FILE" ]; then
  14.     # 导入生成的 SQL 文件到 MySQL 服务器
  15.     mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $MYSQL_HOST < $SQL_FILE
  16.     if [ $? -eq 0 ]; then
  17.         echo "MySQL 用户和权限更新成功。"
  18.     else
  19.         echo "MySQL 用户和权限更新失败。"
  20.     fi
  21. else
  22.     echo "SQL 文件生成失败。"
  23. fi
复制代码
赋予脚本权限:
  1. chmod +x /path/to/update_mysql_users.sh
复制代码
运行脚本:
  1. /path/to/update_mysql_users.sh
复制代码
5、定时任务自动运行:

编辑crontab
  1. crontab -e
复制代码
添加以下行代码,确保每天运行脚本:
  1. 0 0 * * * /path/to/update_mysql_users.sh
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表