如何使用Python恢复MySQL数据库



我有一个在数据库备份过程中生成的sql文件,我想从该sql文件加载所有数据库内容到另一个MySQL数据库(辅助数据库)。

我创建了一个python函数来加载sql文件中的整个数据库但当我执行该函数时,我得到了一个错误

'str'对象不可调用

下面是python脚本
def load_database_dump_to_secondary_mysql(file_path='db_backup_file.sql'):
query = f'source {file_path}'
try:
connection = mysql_hook.get_conn() # connection to secondary db
cursor = connection.cursor(query)
print('LOAD TO MYSQL COMPLETE')
except Exception as xerror:
print("LOAD ERROR: ", xerror)

注意:mysql_hook是一个气流连接器,包含MySQL数据库连接信息,如主机,用户/passwd,数据库名称。另外,我没有连接到主数据库,我只接收sql转储文件。

我错过了什么?

source是客户端内置命令:https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html

这不是MySQL的SQL解析器可以理解的SQL查询。

所以你不能使用cursor.execute()执行source,因为它直接进入动态SQL接口。

你必须使用MySQL命令行客户端作为子进程运行它:

subprocess.run(['mysql', '-e', f'source {file_path}'])

您可能需要mysql客户端的其他选项,如用户,密码,主机等。

try this

import mysql.connector as m
# database which you want to backup
db = 'geeksforgeeks'
connection = m.connect(host='localhost', user='root',
password='123', database=db)
cursor = connection.cursor()
# Getting all the table names
cursor.execute('SHOW TABLES;')
table_names = []
for record in cursor.fetchall():
table_names.append(record[0])
backup_dbname = db + '_backup'
try:
cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
pass
cursor.execute(f'USE {backup_dbname}')
for table_name in table_names:
cursor.execute(
f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')

最新更新