数据备份、pymysql模块

----------mysql数据备份-------------

 

 

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

 

一、使用mysql实现逻辑备份

#语法:
# 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; 

 

 三、备份/恢复案例

#数据库备份/恢复实验一:数据库损坏
备份:
1. # mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
2. # mysql -uroot -p123 -e 'flush logs' //截断并产生新的binlog
3. 插入数据 //模拟服务器正常运行
4. mysql> set sql_log_bin=0; //模拟服务器损坏
mysql> drop database db;恢复:
1. # mysqlbinlog 最后一个binlog > /backup/last_bin.log
2. mysql> set sql_log_bin=0; 
mysql> source /backup/2014-02-13_all.sql //恢复最近一次完全备份 
mysql> source /backup/last_bin.log //恢复最后个binlog文件#数据库备份/恢复实验二:如果有误删除
备份:
1. mysqldump -uroot -p123 --all-databases > /backup/`date +%F`_all.sql
2. mysql -uroot -p123 -e 'flush logs' //截断并产生新的binlog
3. 插入数据 //模拟服务器正常运行
4. drop table db1.t1 //模拟误删除
5. 插入数据 //模拟服务器正常运行恢复:
1. # mysqlbinlog 最后一个binlog --stop-position=260 > /tmp/1.sql 
# mysqlbinlog 最后一个binlog --start-position=900 > /tmp/2.sql 
2. mysql> set sql_log_bin=0; 
mysql> source /backup/2014-02-13_all.sql //恢复最近一次完全备份
mysql> source /tmp/1.log //恢复最后个binlog文件
mysql> source /tmp/2.log //恢复最后个binlog文件注意事项:
1. 完全恢复到一个干净的环境(例如新的数据库或删除原有的数据库)
2. 恢复期间所有SQL语句不应该记录到binlog中
View Code

 

 四、实现自动化备份

备份计划:
1. 什么时间 2:00
2. 对哪些数据库备份
3. 备份文件放的位置备份脚本:
[root@egon ~]# vim /mysql_back.sql
#!/bin/bash
back_dir=/backup
back_file=`date +%F`_all.sql
user=root
pass=123if [ ! -d /backup ];then
mkdir -p /backup
fi# 备份并截断日志
mysqldump -u${user} -p${pass} --events --all-databases > ${back_dir}/${back_file}
mysql -u${user} -p${pass} -e 'flush logs'# 只保留最近一周的备份
cd $back_dir
find . -mtime +7 -exec rm -rf {} \;手动测试:
[root@egon ~]# chmod a+x /mysql_back.sql 
[root@egon ~]# chattr +i /mysql_back.sql
[root@egon ~]# /mysql_back.sql

配置cron:
[root@egon ~]# crontab -l
2 * * * /mysql_back.sql
View Code

 

五、表的导出和导入

SELECT... INTO OUTFILE 导出文本文件
示例:
mysql> SELECT * FROM school.student1
INTO OUTFILE 'student1.txt'
FIELDS TERMINATED BY ',' //定义字段分隔符
OPTIONALLY ENCLOSED BY '' //定义字符串使用什么符号括起来
LINES TERMINATED BY '\n' ; //定义换行符mysql 命令导出文本文件
示例:
# mysql -u root -p123 -e 'select * from student1.school' > /tmp/student1.txt
# mysql -u root -p123 --xml -e 'select * from student1.school' > /tmp/student1.xml
# mysql -u root -p123 --html -e 'select * from student1.school' > /tmp/student1.html

LOAD DATA INFILE 导入文本文件
mysql> DELETE FROM student1;
mysql> LOAD DATA INFILE '/tmp/student1.txt'
INTO TABLE school.student1
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n';
View Code

 

 六、数据库迁移

 

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

 

 

 

              ------------------pymysql模块---------------------- 

#安装
pip3 install pymysql
import pymysql
try:# 1.conn是一个表示连接的对象conn = pymysql.connect(host="127.0.0.1",port = 3306,user = "root",password = "123321",database = "testDB")print("连接服务器成功!")#2. 查询数据 需要借助cursor类  游标   默认游标返回值类型为元组# pymysql.cursors.DictCursor  可以将结果转为字典cursor = conn.cursor(pymysql.cursors.DictCursor)# 3.执行sql语句sql = "select *from user;"res = cursor.execute(sql) #res为本次查询得到的记录条数print(res)# 4.提取数据print(cursor.fetchall())  # 提取本次查询所有结果# print(cursor.fetchone())  # 提取本次查询的第一条记录# print(cursor.fetchone())  # 提取本次查询的第一条记录# print(cursor.fetchmany(2))  # 指定提取记录的条数# 如果游标已经到达最后 将无法在读取到数据 可以使用scroll来移动游标位置cursor.scroll(-1,mode="relative")# mode参数表示 是相对位置relative 还是绝对位置 absoluteprint(cursor.fetchall())  # 提取本次查询所有结果except Exception as e:print(type(e),e)
finally:# 无论是否执行成功 最后都需要关闭连接if cursor:cursor.close() # 关闭游标if conn:conn.close() # 关闭连接

 

 

 一、excute()之sql注入

 

登录 客户端在网页输入用户名和密码  浏览器要把接收的数据传给后台服务器
再由后台服务器 交给数据库服务器可以会遇到sql注入攻击
什么sql注入攻击  一些不法分子 可能会在输入的数据中 添加一系列sql语句 来跳过认证环节 甚至直接删除数据解决方案1.在客户端接收数据时 做一个re的判断  如果包含sql相关的字符 就直接报错2.在服务器收到某一个客户端 发送的数据时 做一个判断其实pymysql 已经封装好了相关的判断逻辑 只要将参数交给pymysql来拼接即可
import pymysql# 1.conn是一个表示连接的对象
conn = pymysql.connect(host="127.0.0.1",port = 3306,user = "root",password = "123321",database = "testDB")
print("连接服务器成功!")
# 原来是我们对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()

import pymysql
#链接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
#游标
cursor=conn.cursor()#执行sql语句
#part1
# sql='insert into userinfo(name,password) values("root","123456");'
# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
# print(res)#part2
# sql='insert into userinfo(name,password) values(%s,%s);'
# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
# print(res)#part3
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数
print(res)conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()
View Code

 

 

三、查:fetchone, fetchmany, fetcall

import pymysql
#链接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
#游标
cursor=conn.cursor()#执行sql语句
sql='select * from userinfo;'
rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询# cursor.scroll(3,mode='absolute') # 相对绝对位置移动
# cursor.scroll(3,mode='relative') # 相对当前位置移动
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print('%s rows in set (0.00 sec)' %rows)conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()'''
(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''
View Code

 

 

四、获取插入的最后一条自增ID

import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
cursor=conn.cursor()sql='insert into userinfo(name,password) values("xxx","123");'
rows=cursor.execute(sql)
print(cursor.lastrowid) #在插入语句后查看

conn.commit()cursor.close()
conn.close()
View Code

 

转载于:https://www.cnblogs.com/pdun/p/10561751.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优雅的找出ArrayList中重复的元素

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法1 代码&#xff1a; public class Main { public static void main(String[] args){ List<String> list new ArrayList&…

全球通吃的九大黄金专业

出国留学的同学在选专业时尤其摇摆不定&#xff0c;选择时需要根据以后的就业发展来挑选适合自己的专业。专业选择得当与否&#xff0c;决定着留学生回国发展是否顺利&#xff0c;决定着巨额投资是否物有所值&#xff0c;以下九类比较有发展潜力的黄金留学专业&#xff0c;供大…

C语言里最基础的关键字

内建类型&#xff1a; void、char、short、int、long、float、double 自建类型&#xff1a; struct、union、enum、sizeof 类型限定符&#xff1a; auto、const、static、volatile、register、extern、typedef、signed、unsigned 分支&#xff1a; if、else、switch、case、def…

mysql 行转列 (结果集以坐标显示)

create table capacity(type int ,numbers int ,monthst INT ); select type, sum(case monthst when 1 then numbers else 0 end ) 一月, sum(case monthst when 2 then numbers else 0 end ) 二月, sum(case monthst when 3 then numbers else 0 end ) 三月, sum(case months…

(五)springcloud微服务分布式云架构 - 云架构代码结构构建

上一篇介绍了《整合spring cloud云服务架构 - 企业分布式微服务云架构图》&#xff0c;本篇我们根据架构图进行代码的构建。根据微服务化设计思想&#xff0c;结合spring cloud一些优秀的项目&#xff0c;如服务发现、治理、配置化管理、路由负载、安全控制等优秀解决方案&…

FastJson 中 jsonArray 转换成 list 集合的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 今天在写代码时候&#xff0c;遇到了需要将json文本改成jsonobject对象&#xff0c;然后将jsonobject对象转换成jsonArray数组&#xff…

信用卡使用十年的心得体会(图)

从第一张信用卡开卡以来&#xff0c;用卡也十多年了。一共用过三家银行的信用卡&#xff0c;分别是&#xff1a;招商银行、建设银行和交通银行。 谈不上用卡达人&#xff0c;只是将自己这十多年的使用体会&#xff0c;分享给大家吧~ 1、可按自己喜好设置还款日期——第一次…

linux命令编译C语言程序

C语言简介&#xff1a; BCPL->newB->C->UNIX->Linux->gcc C语言专门编写操作系统的语言&#xff0c;所以天生适合对硬件编程&#xff0c;也以运行速度快著称&#xff0c;也非常适合实现数据结构和算法。 由于出现时间过早&#xff0c;有很多缺陷&#xff0c;也…

PHP中插件机制的一种实现方案

插件&#xff0c;亦即Plug-in&#xff0c;是指一类特定的功能模块&#xff08;通常由第三方开发者实现&#xff09;&#xff0c;它的特点是&#xff1a;当你需要它的时候激活它&#xff0c;不需要它的时候禁用/删除它&#xff1b;且无 论是激活还是禁用都不影响系统核心模块的运…

python模块学习之glob模块

glob模块 功能描述&#xff1a;glob模块可以使用Unix shell风格的通配符匹配符合特定格式的文件和文件夹&#xff0c;跟windows的文件搜索功能差不多。glob模块并非调用一个子shell实现搜索功能&#xff0c;而是在内部调用了os.listdir()和fnmatch.fnmatch()。查看我之前写的fn…

根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 [ {"data" : {"code" : "044","post" : "xxx领导", "email" : "…

给生命一个助跑的过程(图)

在高原的上空&#xff0c;常常可以见到秃鹫在翱翔。 秃鹫又叫座山雕&#xff0c;也被人誉为“神鹰”&#xff0c;是高原上体格最大的猛禽。它们往往栖息在海拔2000-5000多米的高山原上&#xff0c;体重达到7-11公斤。秃鹫张开翅膀后&#xff0c;整个身体有2米多长&#xff0c;…

ELK 构建 MySQL 慢日志收集平台详解

ELK 介绍 ELK 最早是 Elasticsearch&#xff08;以下简称ES&#xff09;、Logstash、Kibana 三款开源软件的简称&#xff0c;三款软件后来被同一公司收购&#xff0c;并加入了Xpark、Beats等组件&#xff0c;改名为Elastic Stack&#xff0c;成为现在最流行的开源日志解决方案&…

数据类型转换规则C语言

一、数据类型 为什么对数据进行分类&#xff1a;节约存储空间&#xff0c;提高运行速度。整型&#xff1a;signedsigned char 1 -128~127signed short 2 -32678~32767signed int 4 正负20亿signed long 4/8 正负20亿/9…

Visual Studio 的码云扩展 V1.0.85 发布

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> Visual Studio 的码云扩展 V1.0.85 已发布&#xff1a; 针对扩展进行了SDK部分的重写修正克隆窗体和快捷方式的图标颜色随主题变化修正快捷方式 优化用户登录和token处理机制调整了…

用 FastJSON 将 JSON 字符串转换为 Map

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 本文是利用阿里巴巴封装的FastJSON来转换json字符串的。例子如下&#xff1a; import com.alibaba.fastjson.JSON; import com.aliba…

shark恒破解笔记4-API断点GetPrivateProfileStringA

这小节是通过断在GetPrivateProfileStringA&#xff0c;然后找到注册码的。 1.运行程序输入假码111111&#xff0c;提示重启。通过这判断这是一个重启来验证的&#xff0c;那么它是如何来验证的呢&#xff1f;观察程序目录下会发现有一个名为“config.ini"的文件 那么判断…

开关语句、循环语句、goto

复习&#xff1a; 1、数据类型&#xff1a;signed char 1 %hhd -128~127signed short 2 %hd -32768~32767signed int 4 %d 正负20亿signed long 4 %ldsigned long long 8 %lld 9天开头的19位数unsigned char …

成功男士的健康心理特征

自信&#xff1a;他们普遍都有很强的自信心&#xff0c;有时有咄咄逼人的感觉。 急迫感&#xff1a;他们通常很急地想见到事物的成果&#xff0c;因此会给别人带来许多的压力。他们信仰“时间就是金钱”&#xff0c;不喜欢也不会把宝贵的时间浪费在琐碎的无聊事情上。 脚踏实…

DBlink的创建与删除

创建方式一&#xff1a; create [public] database link link名称 connect to 对方数据库用户identified by 对方数据库用户密码 using 对方数据库ip:端口/服务名; 创建方式二&#xff1a; create [public] database link link名称 connect to 对方数据库用户identified by 对…