MySQL總結02
sql優化
- Insert使用批量
- 查詢不要使用*, MySQ需要先查出表裏的所有字段,再進行匹配
- 字符串的查詢條件要帶引號,否則可能不走索引
備份及恢復
備份
mysqldump -uroot -ppasswd -B dbname > filename.sql
note: -B備份指定庫,使用-B備份文件中多了兩行代碼(create database dbname; use dbname;)
-A是備份所有的庫指定字符集備份
mysqldump -uroot -ppasswd -B -default-character-set=utf8 dbname > mysql.bak.sql
使用壓縮命令備份
mysqldump -uroot -ppasswd --default-character-set=utf8 dbname|gzip > mysql.bak.sql.zip
備份多個庫
mysqldump -uroot -ppasswd -B dbname1 dbname2..|gzip > mysql.bak.sql.zip
備份多個表
mysqldump -uroot -ppasswd dbname tablename1 tablename2.. > mysql.bak.sql
恢復
mysqldump -uroot -ppasswd dbname < filename.sql
- mysqldump關鍵參數
- -B 指定多個庫,增加建庫語句和use語句
- --compact去掉註釋,適合調試輸出,生產不用
- -A備份所有庫
- -F刷新binlog日誌
- --master-data 增加binlog日誌文件及對應的位置點
- -x, --lock-all-tables
- -d 只備份表結構
- -t 只備份數據
mysqlbinlog
開啟binlog
修改mysqld文件中的log-bin=日誌文件名,binlog日誌會根據自己的規則自動輪詢
binlog只記錄增刪改的操作日誌,不記錄查詢的操作日誌,此日誌通常用來恢復數據用- 使用binlog日誌恢復數據
首先將binlog日誌到處為sql文件
mysqlbinlog -d dbname binlogname > bin.sql
note: binlog文件只能用mysqlbinlog命令打開查看
-d: 只導出數據內容將sql文件導入數據庫
mysql -uroot -ppasswd dbname < bin.sql
刷新切割日誌
mysqladmin -uroot -ppasswd flush-log
命令使用範圍
在mysql內部操作外部命令
system + 外部命令
在mysql外部執行mysql內部命令
mysql -uroot -ppasswd -e "sql命令"
字符集亂碼問題
mysql字符集亂碼問題主要是因為系統字符集、客戶端字符集、mysql字符集不統一造成的
客戶端字符集修改
臨時改變顯示字符集:set names utf-8
永久:更改my.cng客戶端模塊的參數- 服務端字符集修改
更改my.cnf參數
[mysql]
default-character-set=utf8 適合5.1及之前版本
default-set-server=utf8 適合5.5版本
linux系統字符集修改
修改linux的字符集:vi /etc/sysconfig/i18n
是修改的文件生效:source /etc/sysconfig/i18n
或者. /etc/sysconfig/i18n
查看字符集
mysql -uroot -ppasswd -e "show variables like ‘character_set%‘
顯示內容為:
- 修改已經中文亂碼的數據庫表
- 建庫及建表語句到處,修改為utf8
- 到處所有的mysql數據
- 修改mysql服務端和客戶端編碼為utf8
- 刪除原有的庫表及數據
- 導入新的建庫及建表語句
- 導入mysql所有數據
MySQL主從同步
- 文件同步
- NFS網絡文件共享同步存儲數據
- samba共享數據
- 定時任務或守護進程結合rsync, scp
- inotify(scrsync) + rsync觸發式實時數據同步
- ftp數據同步
- ssh key + scp/rsync
- mysql主從同步四種方案
- 主從方式,通過同步binlog最大限度保持數據一致,但也有風險
- 雙寫, 寫的壓力大
- 谷歌半同步插件,異步改為半同步
MySQL總結02