问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用mysql连接工具连接了Mysql数据库,怎么把里边的数据库备份呢?

发布网友 发布时间:2022-04-10 07:22

我来回答

4个回答

懂视网 时间:2022-04-10 11:44

注册码: NAVH-WK6A-DMVK-DKW3

     

                      技术分享

 

                 技术分享

 

 

  2   pymysql模块:

安装
pip3 install pymysql

 

1 链接、执行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(‘登录失败‘)
 

 

 2 execute()之 sql注入  

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

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

      name=‘xxx‘ -- haha

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

sql 注入
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的规矩来。

 

3 增、删、改: 相应的sql语句 + conn.commit()

执行sql语句

sql=‘insert into userinfo(name,password) values("root","123456");‘
res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
print(res)
conn.commit() # 提交后才发现表中插入记录成功
sql=‘insert into userinfo(name,password) values(%s,%s);‘
res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
print(res)
conn.commit() # 提交后才发现表中插入记录成功
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()


 

4 fetchone,fetchmany,fetchall --- cursor.scroll(3,mode=‘absolute‘) / mode=‘relative‘

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)

 

3 MySQL数据备份

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

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

 

 

    1 使用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  #所有库 这里的 --不是注释关键字
 

 

 

      2 恢复逻辑备份  
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; 
 

 

3 备份/恢复案例

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



MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件
主要作用  
数据回复 
主从数据库。用于slave端执行增删改,保持与master同步。 

开启binary log功能 

     需要修改mysql的配置文件,添加一句 log_bin = mysql_bin 
     eg: 
     [mysqld] 
             ...... 
             log_bin = mysql_bin 
             ...... 
       log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: 
             mysql_bin.000001 
             mysql_bin.000002 
             ...... 
  
配置保存以后重启mysql的服务器,用show variables like  ‘%bin%‘查看bin-log是否开启


利用bin_log恢复数据 

恢复指定数据端的数据了,可以直接恢复到数据库中: 
mysqlbinlog  --start-date="2012-10-15 16:30:00"
--stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 
亦可导出为sql文件,再导入至数据库中: 
mysqlbinlog  --start-date="2012-10-15 16:30:00"
--stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:1.sql 
source d:1.sql 
指定开始结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,
我们可以在恢复的过程中指定回复从A位置到B位置的log.需要用下面两个参数来指定: 
--start-positon="50" //指定从50位置开始 
--stop-postion="100"//指定到100位置结束 


 


  4 实现自动化备份


备份计划:
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=123

if [ ! -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

 

 

5 表的导出和导入


SELECT... INTO OUTFILE 导出文本文件 mysql> SELECT * FROM school.student1 INTO OUTFILE ‘student1.txt‘ FIELDS TERMINATED BY ‘,‘ //定义字段分隔符 OPTIONALLY ENCLOSED BY ‘”‘ //定义字符串使用什么符号括起来 LINES TERMINATED BY ‘ ‘ ; //定义换行符 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 ‘ ‘;

可能会报错

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

 

6 数据库迁移

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

 

 

数据库基础----mysql的IDE工具----pymysql模块------数据备份

标签:char   jpg   log   运行   文件中   art   image   bar   cat   

热心网友 时间:2022-04-10 08:52

mysqlmp,你可以查一下这个东西的文档,它就是用来整体备份的。

有时候,很多系统级软件的操作,都是有shell来完成的,而不是界面话的工具,呵呵~~

热心网友 时间:2022-04-10 10:10

直接用mysql备份呀

热心网友 时间:2022-04-10 11:44

用mysql备份
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
维多利亚的秘密香水什么档次 维密香水哪款好闻 三星Tizen系统会像Android和iOS一样知名吗? 妈的,我又想买荣耀play了,怎么办 2024年最新上市维多利亚的秘密、曼妮芬、氧心:三强对决,哪款背心式文... 知名文胸品牌有哪些 文胸都有哪些品牌 怎么看对方有没有抖音? 摩托罗拉E680g为什么加锁和解锁会闪动 新买的宾得K50不知道怎么用快门次数很慢我只想单纯的想要知道怎么调节快 ... moto e6 不刷机能用滑动解锁的吗? 签订抵押担保合同但未办理抵押登记,是否有效? 没有到车管所办理抵押证明 借款双方私下签订的 汽车抵押借款合同。有法律效力吗? 到机场托运行李箱坏了怎么办 如果没办理抵押登记,汽车抵押是否生效? 汽车抵押贷款没办理抵押登记,汽车抵押是否生效? 汽车抵押未登记是否有效 公司交的五险最低标准 五险一金合计最低人民币多少钱? 我的老师、叙事散文、作文500字左右、速度快?? 公司社保最低标准是多少 广东阳江核电厂是国企还是央企 核电站属于国企还是央企,辽宁红沿河核电站是属于国企还是央企 五险最低标准是多少 我们一起走过、初中作文 中广核风力发电有限公司华南分公司是国企吗? 回味是一份收获写一篇五百字的作文 急!!求作文《2009年我们一起走过》。初中水平 求一篇《风雨中我们一起走过》500字 作文 那些年我们一起走过500字记叙文,学霸帮帮忙。重赏&#xF4A9; 我们一起走过初三500字作文 抵押合同签订后未办理登记,最高法怎么判 向个人借款,并且用车子抵押,但是没有做抵押登记,这样还不上钱的时候,车子就属于出借人了吗? 汽车抵押贷款一定要办理抵押登记吗 车辆抵押登记的意义。我们是个人对个人的抵押借款,车和车辆的所有证件押在我们这里,如果不办理抵押登记会 三星手机怎样设置短信开机启动 三星手机短信功能无法使用 请问有什么样的证书可以与高级工程师相等效果的?像系统架构设计师(高级)这样的可以吗? 三星手机 可以接收短信 无法发送短信 显示一直是发送中 自启管理那边勾了信息自启也没有用 系统架构设计师属于高级工程师 符不符合北京落户要求 LED手术无影灯怎么调节亮度? 三星手机开机无法进入系统怎么办 医院手术室里的无影灯是怎样制成的?为什么有了无影灯手术时就不会产生影子?(请简要说明) 三星手机怎么设置开机启动项? 手术室无影灯为什么是冷灯? 三星手机on7无法开机 三星NOTE10.1开不了机怎么办,按关机总是重启 到三星标志无法启动,求解决。 qq会员的钱怎样付? 冬季冰箱长期不用可以吗?会影响冰箱寿命吗?谢谢~~ 如何开通QQ会员?付钱在哪里付?先感谢。 冬天冰箱不用会放坏吗?