mysql六:数据备份、pymysql模块

阅读目录

一 MySQL数据备份

二 pymysql模块

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

 

三、备份/恢复案例

#数据库备份/恢复实验一:数据库损坏
备份:
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中

四、实现自动化备份

备份计划:
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
* * * /mysql_back.sql

五、表的导出和导入

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';
#可能会报错
mysql> select * from db1.emp into outfile 'C:\\db1.emp.txt' fields terminated by ',' lines terminated by '\r\n';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable#数据库最关键的是数据,一旦数据库权限泄露,那么通过上述语句就可以轻松将数据导出到文件中然后下载拿走,因而mysql对此作了限制,只能将文件导出到指定目录
在配置文件中
[mysqld]
secure_file_priv='C:\\' #只能将数据导出到C:\\下

重启mysql
重新执行上述语句
报错:Variable 'secure_file_priv' is a read only

六、数据库迁移

务必保证在相同版本之间迁移
# 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',charset='utf8')
#游标
cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#执行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()

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()

四 查:fetchone,fetchmany,fetchall

 

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

五 获取插入的最后一条数据的自增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()

 

 

 

 

 

 

 

 

MySQL系列

第一篇:初识数据库

第二篇:库操作

第三篇:表操作

第四篇:数据操作

第五篇:索引原理与慢查询优化

第六篇:数据备份、pymysql模块

第七篇:视图、触发器、事务、存储过程、函数

第八篇:ORM框架SQLAlchemy

转载于:https://www.cnblogs.com/shangdelu/p/8478486.html

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

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

相关文章

Vim案列掌握vim的基本操作——案例一:vim创建编写txt文件

案例一:vim创建编写txt文件 1.vim创建test.txt文件 vim test.txt 2.输入i,I,a,A,o,O,r,R均可&#xff08;这里以i为例&#xff09; 3.保存文件并退出vim。 a.先返回到一般模式 Esc b.冒号切换到命令行模式 : c.保存文件 :w d.退出vim :q successful 退回界面后可以再次…

Vim功能键整理(图片来自mooc)

1.一般模式 2.编辑模式 3.命令行模式

rpn风险等级评价准则_2019一建经济学习重点:技术方案经济效果评价

2019年一级建造师备考正在进行中&#xff0c;你是在看教材还是在刷题呢&#xff1f;今天优路教育小编是来送干货的&#xff0c;教材太厚&#xff0c;知识点太乱&#xff0c;那就来看这里的考点总结吧。接下来小编带大家一起学习《工程经济》第一章工程经济。一建《工程经济》第…

Android编程之页面跳转整理(只涉及关键步骤,需要有一定的基础,小白学习勿入)

自我学习篇: 1.创建你需要的页面&#xff0c;这里演示以创建一个主页和一个 子页进行跳转作为参考。 2.编写layout&#xff0c;这里仅需要创建一个按钮即可&#xff0c;至于样式美观大家可以根据需要进行自我调整。 这里需要注意的是对id的修改&#xff0c;自己应该起一个相对…

电脑无法打开特定网页_监理检测网校电脑微信无法打开公路试验检测视频课程的处理方法...

电脑版微信安装后&#xff0c;通过微信中置顶的监理检测网校公众号&#xff0c;菜单进入网校课程有的人会出现课程打不开&#xff0c;直接打开的是浏览器&#xff0c;无法学习&#xff0c;处理方法如下&#xff1a;电脑上打开微信&#xff0c;左下角三横线图标点开 &#xff0c…

Linux环境下创建运行.java文件

1.下载安装jdk。 一条yum指令就可以搞定了,也可以自己从windows上共享文件进行操作&#xff0c;有些复杂&#xff0c;这里不做详细描述。 以后熟练了&#xff0c;可能进行二更。 yum install java-1.8.0-openjdk* -y 这里需要注意是需要你转换到自己的root权限的 su root 截图…

Linux下的Shell编程之Helloworld.sh看过来

1.编写HelloWorld.sh vim HelloWorld.sh 2.按下i进行编辑 里面的代码如下: #!bin/sh echo "hello world!" 然后Esc退出编辑模式 然后:wq保存并退出vim 小白看参考: 小白vim指令学习 3.运行HelloWorld.sh&#xff08;方式有两种&#xff09; a.sh HelloWorld.sh …

Linux下删除非空文件目录

删除目录大家第一反应应该和我一样都是rmdir 但今天有一个目录里因为配置有好多文件直接烦死&#xff0c;不能rmdir直接删除&#xff0c;要是使用这个指令还要先用cd指令转换到该目录下一个个删除&#xff0c;实在是有点麻烦&#xff0c;最后终于还是找到了正确的打开方式。 …

jdk1.8配置(自我速成)

1.JAVA_HOME 变量名字:JAVA_HOME 变量值:找到自己安装jdk的目录即可&#xff0c;有的教程路径到了bin&#xff0c;但其实到不到都可以。 2.CLASSPATH 变量名:CLASSPATH 变量值&#xff1a; .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 注意这里那个英文的点点不要少了…

Eclipse export导出war包报错(Module name is invalid.)

出于设计模式的作业过程中遇到的问题&#xff0c;老师要求代码文件最后大家要导出war包&#xff0c;前两次还好好的&#xff0c;今天突然报错 这里来说一下原因&#xff0c;也就是web项目可以导出war包&#xff0c;而java项目是不可以的&#xff0c;下面的操作其实本质上就是给…

车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件

随着社会发展进入数字化时代&#xff0c;智慧展厅一词&#xff0c;也渐渐的让我们熟悉&#xff0c;在打造智慧展厅的同时&#xff0c;“中控系统软件”功不可没&#xff0c;中控系统软件的可能大家对这个产品也不是特别了解&#xff0c;但接下来&#xff0c;鼎深小编所要介绍的…

Tool:Visual Studio

ylbtech-Tool&#xff1a;Visual StudioMicrosoft Visual Studio&#xff08;简称VS&#xff09;是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集&#xff0c;它包括了整个软件生命周期中所需要的大部分工具&#xff0c;如UML工具、代码管控工具、集成开发环…

const的用法以及与define使用的区别

const使用于C语言中&#xff0c;用于定义常变量&#xff0c;即用 const 定义的变量的值是不允许改变的&#xff0c;即不允许给它重新赋值&#xff0c;即使是赋相同的值也不可以。 因此有的时候也称定义的为只读变量。 虽然 const 定义的是只读变量&#xff0c;就相当于是定义一…

word activex部件不能创建对象_如何用Word批量制作员工工作证?1分钟搞定1000份!只需三步...

工作证是我们工作中很常见的东西&#xff0c;不过由于每个人的名字、部门、照片都不同&#xff0c;很多小伙伴都不知道怎么批量制作&#xff0c;总是傻傻地一张一张制作&#xff0c;这样特别浪费时间&#xff0c;今天小编就来跟大家分享如何批量制作&#xff01;一、准备工作1、…

【Hadoop系列】HDFS

Hadoop的前世今生 什么是大数据 各行各业都会产生大量的数据&#xff0c;比如社交网站的意见观点&#xff0c;电商平台人们浏览网页停留的时间&#xff0c;交通运输每天产生的数据等等。这些数据大多不是结构化的&#xff0c;一般来说都是半结构化或者非结构化的 在以前&#x…

phpstudy使用(80端口被system占用,无法关闭和删除)

在使用phpstudy的时候直接一键启动&#xff0c;显示提示80端口已被占用&#xff0c;在尝试关闭和删除后显示被system占用&#xff0c;无法关闭。 这里我首先试着去用任务管理器彻底关闭删除这个进程&#xff0c;后来发现提示&#xff0c;如果删除可能会影响系统正常运行&#…

kingbase自带的驱动在哪_德国制造到底强在哪?从工博会上伺服驱动的创新上能看出真相!...

随着2014年协作机器人在中国兴起&#xff0c;UR、新松、达明、遨博、大族激光等企业积极布局协作机器人市场。2014-2019年&#xff0c;我国协作机器人销量复合增速一度超过了50%&#xff0c;2019年我国协作机器人产量超过8000台。但目前协作机器人和AGV的核心零部件高端市场&am…

phpstudy(自己电脑主机做服务器,手机网站界面打不开)

可能有多种原因&#xff0c; 1.手机电脑并没有连接同一个局域网。 2.我这里是因为修改了80端口&#xff0c;在登录时忘记修改登录的网址。 因为80端口被占用&#xff0c;于是我修改了phpstudy的端口为8080&#xff0c;在上传成功后&#xff0c;使用手机输入电脑的Ip地址死活打…

3结构介绍_豹驰(BOACH)声学材料吸隔声方法介绍—(下)材料隔声特性曲线

基于前两个章节(《豹驰声学材料吸/隔测试方法基础介绍—(上)》&《豹驰声学材料吸/隔声测试方法介绍—(中)》的声学材料吸隔声测试方法介绍&#xff0c;可以了解材料的检测手段及如何有效的采用测试获取数字化模型搭建的输入&#xff0c;支持吸隔声材料制品的设计开发&#…

jQuery基本语法

一、jQuery基础1.为什么要用jquery&#xff1f; 写起来简单&#xff0c;省事&#xff0c;开发效率高&#xff0c;兼容性好2、什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库&#xff08;类似python里面的模块&#xff09;3、如何使用jQuery&#xff1f; 1、导…