1. 程式人生 > >MySQL總結02

MySQL總結02

config character 異步 mage mysqldump 常用 l命令 亂碼 5.5

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