標籤:image width logs base 代碼 推薦 label user 操作
一 IDE工具介紹
生產環境還是推薦使用mysql命令列,但為了方便我們測試,可以使用IDE工具
下載連結:https://pan.baidu.com/s/1bpo5mqj
掌握:#1. 測試+連結資料庫#2. 建立庫#3. 建立表,新增欄位+類型+約束#4. 設計表:外鍵#5. 建立查詢#6. 備份庫/表#注意:批量加註釋:ctrl+?鍵批量去注釋:ctrl+shift+?鍵
回到頂部二 MySQL資料備份
#1. 物理備份: 直接複製資料庫檔案,適用於大型資料庫環境。但不能恢複到異構系統中如Windows。#2. 邏輯備份: 備份的是建表、建庫、插入等操作所執行SQL語句,適用於中小型資料庫,效率相對較低。#3. 匯出表: 將表匯入到文字檔中。
一、使用mysqldump實現邏輯備份
#文法:# mysqldump -h 伺服器 -u使用者名稱 -p密碼 資料庫名 > 備份檔案.sql#樣本:#單庫備份mysqldump -uroot -p123 db1 > db1.sqlmysqldump -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
二、恢複邏輯備份
#方法一:[[email protected] 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;
三、備份/恢複案例
View Code
四、實現自動化備份
View Code
五、表的匯出和匯入
View Code
六、資料庫遷移
務必保證在相同版本之間遷移# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目標IP -uroot -p456
七 pymysql模組
#安裝pip3 install pymysql
一 連結、執行sql、關閉(遊標)
import pymysqluser=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(‘登入失敗‘)
二 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()
View Code
四 查:fetchone,fetchmany,fetchall
View Code
五 擷取插入的最後一條資料的自增ID
View Code
mysql備份及pymysql