📜  如何使用Python备份 MySQL 数据库?

📅  最后修改于: 2022-05-13 01:55:38.691000             🧑  作者: Mango

如何使用Python备份 MySQL 数据库?

在本文中,我们将学习如何使用Python备份 MySQL 数据库。

使用的数据库:

需要Python模块:

在这篇文章中,我们将使用Python的 mysql-connector 模块来备份我们的数据。您可以使用以下命令安装 mysql-connector:

pip install mysql-connector

备份数据库:

因此,备份我们的数据库是一项相当简单的任务。

我们要做的是,首先,使用 mysql-connector 模块创建与数据库(我们要备份的)的连接。然后我们将创建一个通过该连接获得的游标对象的实例。然后我们将首先使用 SQL 的“SHOW TABLES”命令获取所有表名,并执行游标对象的方法。

例子:

Python3
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])


Python3
backup_dbname = db + '_backup'
try:
    cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
    pass


Python3
cursor.execute(f'USE {backup_dbname}')


Python3
for table_name in table_names:
    cursor.execute(
        f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')


Python3
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}')


数据库中的表

注意: cursor.fetchall() 方法返回一个以表名作为元素的元组列表。我们正在运行一个 for 循环并将该元组的第一个元素(这是我们的表名)存储在我们的列表中,以便获得一个包含所有表名的简单列表。

然后我们将使用 SQL 和游标对象的“CREATE”命令创建我们的备份数据库。我们将在 try 块中执行此操作,这样如果创建的数据库已经存在,则不会返回任何错误。上面的代码如下所示:

Python3

backup_dbname = db + '_backup'
try:
    cursor.execute(f'CREATE DATABASE {backup_dbname}')
except:
    pass

这将创建我们的备份数据库。现在我们将简单地运行带有游标对象的“USE”命令来使用backup_dbname数据库而不是我们当前的数据库。

Python3

cursor.execute(f'USE {backup_dbname}')

这会将我们当前的数据库更改为 backup_dbname。因此,在 SQL 中,当我们运行以下命令时,我们可以将 table1 的副本创建到新创建的 table2 中。

CREATE TABLE table2 SELECT * FROM table1;

所以,我们将在我们的Python代码中做的是,我们将对所有表名运行一个 for 循环,并为该表名执行一个“CREATE”命令(并确保我们现在使用 backup_dbname 作为我们当前的数据库并且它目前还没有任何表),我们将创建一个类似于上面的查询并将表复制到新创建的表中。

代码是:

Python3

for table_name in table_names:
    cursor.execute(
        f'CREATE TABLE {table_name} SELECT * FROM {db}.{table_name}')

请注意,我们通过 {db}.{table_name} 引用原始表,因为它存在于另一个数据库中,因为我们当前的数据库是 backup_dbname。

所以,我们的代码的全貌是这样的:

Python3

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}')

运行这段代码,我们创建了包含所有表和数据的备份数据库。 geeksforgeeks_backup 数据库(我们在此过程中创建)如下所示: