MySQL数据备份

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

库的备份与恢复

1.逻辑备份:使用mysqldump实现

语法 :
mysqldump -h 服务器 -u用户名 -p密码  库名 > 路径\备份文件.sql

#单库备份mysqldump -uroot -p --database db1 > E:\db1_20171030.sql

#多库备份mysqldump -uroot -p --databases aaa bbb ccc > E:\aaa_bbb_ccc_20171030.sql

#备份所有库mysqldump -uroot -p --all-databases > all.sql

2.恢复逻辑备份:

语法:mysql -u用户名 -p密码 < 路径\备份文件.sql

#单库备份,多库备份,所有库备份mysql -uroot -p <  C:\\day45_bak_2017_10_30.sql

表的备份与恢复

备份单表
mysqldump -u用户 -p密码 库名 表名 > 路径\备份文件名.sql
备份多表
mysqldump -u用户 -p密码 库名 表名,表名2,表名3 > 路径\备份文件名.sql
恢复单表,恢复多表
mysql -u用户 -p密码 库名 <  路径\备份文件名.sql#备份多个表 例子
mysqldump -uroot -p  day45 employee t1 t2 > C:\\day45_t1_t2_employee_bak_2017_10_30.sql恢复表
mysql -uroot -p day45 <  C:\\day45_t1_t2_employee_bak_2017_10_30.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模块

参考博客:http://www.cnblogs.com/wt11/p/6141225.html

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

#安装
pip3 install pymysql

import pymysqluser=input('用户名: ').strip()
pwd=input('密码: ').strip()#创建链接
conn=pymysql.connect(host='localhost',port=3306,user='root',password='',database='zzz',charset='utf8'
)#游标cursor=conn.cursor()
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)   #  结果是以字典形式呈现  {字段:数据,....}
#sql语句sql='select * from userinfo where name=%s and password=%s ;'#执行sql语句 res=cursor.execute(sql,(user,pwd))  #执行sql语句,返回sql查询成功的记录数目
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()

View Code

四 查: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)
'''

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

转载于:https://www.cnblogs.com/JAYWX/articles/7755875.html

MySQL系列 数据备份 pymysql模块相关推荐

  1. windows下mysql的数据备份

    windows下mysql的数据备份 网上有很多mysql的备份方法,但是自己成功了的只有三种. 1.简单直白粗暴: 直接从数据库导出sql文件,通常是我们的第三方工具自带的功能,可以整个数据库导出, ...

  2. MySQL的数据备份

    MySQL的数据备份 MySQL数据完全备份 数据备份目的? 数据丢失或者损坏,可以使用备份数据恢复 数据备份策略 完全备份 备份所有数据(一张表,一个库.一台服务器) 增量备份 备份上次备份后,所有 ...

  3. MySQL -Naivacat工具与pymysql模块

    Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库. 官网下载:https ...

  4. Mysql大数据备份和增量备份及还原

    目前主流的有两个工具可以实现物理热备:ibbackup和xtrabackup ;ibbackup是需要授权价格昂贵,而xtrabackup功能比ibbackup强大而且是开源的 Xtrabackup提 ...

  5. mysql 的数据备份_MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  6. 小白学习MySQL - 聊聊数据备份的重要性

    最近某套MySQL数据库服务器异常关机,导致MySQL不能正常拉起来,启动过程中,error日志中记录了如下的信息,可以看到,数据库因为异常关闭,此时会进行实例恢复的操作, [Note] InnoDB ...

  7. mysql 表数据备份和恢复_mysql 数据备份与恢复

    MySQL数据备份与恢复 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适 ...

  8. mysql+自动化数据备份_Mysql:自动化备份

    简介 在这个数据为王的时代,数据的备份十分重要,这里就分享一篇mysql数据库自动备份的脚本(是从网上搜到的),其将配置文件和备份脚本分离,提高了安全性,脚本风格规范严谨,分享给大家希望对需要的小伙伴 ...

  9. MySQL的数据备份和数据恢复

    1.数据备份(mysqldump,在Linux终端操作) 1.命令格式: mysqldump -u用户名 -p 源库名 > ****.sql2.源库名的表示方式--all-databases 备 ...

最新文章

  1. 中兴智能视觉大数据报:要注意,人工智能将衍生更多工作机会
  2. python的闭包要素_Python的闭包
  3. ubuntun中文读书笔记
  4. [js] 不用 + eval Function 实现加法
  5. Linux 下的复制命令,这几个比较靠谱
  6. Numpy 之shape manipulation
  7. 安卓弹性刷新通用版—支持任何view上下刷新均有弹性效果
  8. 去重 属性_亿万级海量数据去重软方法,spark/flink/mr等通用
  9. jdbc连接数据库步骤oracle,jdbc连接oracle数据库的步骤
  10. 电脑小手图标怎么去除_图文教你去除桌面图标箭头_消除电脑图标小箭头的方法-系统城...
  11. 常用计算机接口类型,常见的电脑数据接口类型有哪些
  12. IB中文考生如何把握戏剧冲突的表现形式与特征
  13. 搭建Web服务器建网站的步骤
  14. 适配器模式的三种形式
  15. 经典网络-InceptionV1论文及实践
  16. 用Python爬虫获取NBA球员的生涯数据
  17. Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
  18. 中国EMBA教育培训行业发展规划与投资规模预测报告2021年版
  19. 植物大战僵尸java圣诞版,植物大战僵尸圣诞版-植物大战僵尸2圣诞节版v1.9.1 安卓版-腾牛安卓网...
  20. InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布

热门文章

  1. Backtrader系列教程③:指标篇
  2. 百度全面放弃竞价排名的原因
  3. LDAP 中 CN OU DC 的含义
  4. 学习笔记 在B站上学习了pink老师的js,有个循环的作业:简易ATM
  5. Supplier JAVA_带各位深入理解java1.8之supplier
  6. Parallels Desktop 17已发布Apple M1大幅提速
  7. 【如何增加个人气场】
  8. module java.base does not “opens java.lang“ to unnamed module @1c7696c6
  9. 做什么小生意能月入一万?卖什么月薪过万?
  10. 使用web3调用智能合约的简单例子