mysql备份及pymysql

Posted KeepMoving

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql备份及pymysql相关的知识,希望对你有一定的参考价值。

一 IDE工具介绍

生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具

下载链接:https://pan.baidu.com/s/1bpo5mqj

复制代码
掌握:
#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
#4. 设计表:外键
#5. 新建查询
#6. 备份库/表

#注意:
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键
复制代码

二 MySQL数据备份

#1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。
#2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
#3. 导出表: 将表导入到文本文件中。

一、使用mysqldump实现逻辑备份

复制代码
#语法:
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

#示例:
#单库备份
mysqldump -uroot -p123 db1 > db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

#多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

#备份所有库
mysqldump -uroot -p123 --all-databases > all.sql
复制代码

二、恢复逻辑备份

复制代码
#方法一:
[root@egon backup]# mysql -uroot -p123 < /backup/all.sql

#方法二:
mysql> use db1;
mysql> SET SQL_LOG_BIN=0;
mysql> source /root/db1.sql

#注:如果备份/恢复单个库时,可以修改sql文件
DROP database if exists school;
create database school;
use school;
复制代码

三、备份/恢复案例

 View Code

四、实现自动化备份

 View Code

五、表的导出和导入

 View Code

六、数据库迁移

务必保证在相同版本之间迁移
# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456

七 pymysql模块

#安装
pip3 install pymysql

一 链接、执行sql、关闭(游标)

复制代码
import pymysql
user=input(\'用户名: \').strip()
pwd=input(\'密码: \').strip()

#链接
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123\',database=\'egon\')
#游标
cursor=conn.cursor()

#执行sql语句
sql=\'select * from userinfo where name="%s" and password="%s"\' %(user,pwd) #注意%s需要加引号
print(sql)
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res)

cursor.close()
conn.close()

if res:
    print(\'登录成功\')
else:
    print(\'登录失败\')
复制代码

二 execute()之sql注入

注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

根本原理:就根据程序的字符串拼接name=\'%s\',我们输入一个xxx\' -- haha,用我们输入的xxx加\'在程序中拼接成一个判断条件name=\'xxx\' -- haha\'

复制代码
最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name=\'egon\';则--之后的条件被注释掉了

#1、sql注入之:用户存在,绕过密码
egon\' -- 任意字符

#2、sql注入之:用户不存在,绕过用户与密码
xxx\' or 1=1 -- 任意字符
复制代码

解决方法:

复制代码
# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=\'%s\' and password=\'%s\'" %(user,pwd) # print(sql) # res=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
复制代码

三 增、删、改:conn.commit()

 View Code

四 查:fetchone,fetchmany,fetchall

 View Code

五 获取插入的最后一条数据的自增ID

 View Code

 

以上是关于mysql备份及pymysql的主要内容,如果未能解决你的问题,请参考以下文章

pymysql模块+mysql库/表备份和恢复+事务(锁)

pymysql模块操作数据库与mysql数据备份

mysql六:数据备份pymysql模块

mysql:数据备份pymysql模块

Mysql:数据备份pymysql模块

Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁