备份mysql_mysql备份及pymysql

一 IDE工具介绍

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

掌握:

#1. 测试+链接数据库

#2. 新建库

#3. 新建表,新增字段+类型+约束

#4. 设计表:外键

#5. 新建查询

#6. 备份库/表

#注意:

批量加注释:ctrl+?键

批量去注释:ctrl+shift+?键

48304ba5e6f9fe08f3fa1abda7d326ab.png

二 MySQL数据备份

#1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。

#2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。

#3. 导出表: 将表导入到文本文件中。

一、使用mysqldump实现逻辑备份

48304ba5e6f9fe08f3fa1abda7d326ab.png

#语法:

# 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

48304ba5e6f9fe08f3fa1abda7d326ab.png

二、恢复逻辑备份

48304ba5e6f9fe08f3fa1abda7d326ab.png

#方法一:

[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;

48304ba5e6f9fe08f3fa1abda7d326ab.png

三、备份/恢复案例

8f900a89c6347c561fdf2122f13be562.png View Code

四、实现自动化备份

8f900a89c6347c561fdf2122f13be562.png View Code

五、表的导出和导入

8f900a89c6347c561fdf2122f13be562.png View Code

六、数据库迁移

务必保证在相同版本之间迁移

# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456

七 pymysql模块

#安装

pip3 install pymysql

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

8e6673a2c387429812b24d35f457c299.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

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('登录失败')

48304ba5e6f9fe08f3fa1abda7d326ab.png

二 execute()之sql注入

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

#1、sql注入之:用户存在,绕过密码

egon' -- 任意字符

#2、sql注入之:用户不存在,绕过用户与密码

xxx' or 1=1 -- 任意字符

48304ba5e6f9fe08f3fa1abda7d326ab.png

291f75731918a805bac4f2f99988a5d1.png

18e6fddda5b179004c3939f78021e666.png

b0d3a95cf4272a571a779e9f728c42ec.png

解决方法:

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 原来是我们对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的规矩来。

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

8f900a89c6347c561fdf2122f13be562.png View Code

四 查:fetchone,fetchmany,fetchall

4eeb0d92a22fe3d35aabeb63c68d0f93.png

8f900a89c6347c561fdf2122f13be562.png View Code

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

8f900a89c6347c561fdf2122f13be562.png View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值