1.實現讀寫分離,減輕主庫負載mysql
2.數據安全,作備份恢復sql
3.主從切換作高可用數據庫
基於語句的複製:在主服務器上執行的SQL語句,在從服務器上執行一樣的語句,有可能會因爲SQL執行上下文環境不一樣而是數據不一致。安全
基於行的複製:把改變的內容複製過去,而不是把命令在從服務器上執行一遍。從mysql5.0開始支持,可以嚴格保證數據徹底一致,但此時用mysqlbinlog
去分析日誌就沒啥意義。由於任何一條update語句,都會把涉及到的行數據所有set值,因此binlog文件會比較大。bash
混合類型的複製:默認採用基於語句的複製,一旦發現基於語句的沒法精確的複製時,就會採用基於行的複製。服務器
主從版本一致—>主庫受權複製賬號—>確保開啓binlog及主從server_id惟一—>xtrabackup恢復到從庫—>記錄xtrabackup_binlog_info中binlog名稱及偏移量—>從庫change master to —>slave start—>檢查兩個yesapp
建立負責複製的帳號:工具
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_ali'@'192.168.5.%' IDENTIFIED BY 'slave_ali_pass'; mysql> FLUSH PRIVILEGES;
賦予備份用戶權限:大數據
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppass'; mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS,SUPER ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
假設 MySQL 安裝目錄在/opt/mysql
,my.cnf配置文件/opt/mysql/my.cnf
,端口3306,數據目錄/opt/mysql_data
,sock位於/opt/mysql_data/mysql.sock
。備份數據放在/data/backup/mysql/
。spa
全量備份:
$ export BKP_PASS="bkppass" $ innobackupex --defaults-file=/opt/mysql/my.cnf --host=localhost --port=3306 --user=bkpuser --password=${BKP_PASS} /data/backup/mysql
默認會以當天 日期+時間 戳命名備份目錄。如2018-09-04_20-00-00
全量恢復:
innobackupex --use-memory=16G --apply-log 2018-09-04_20-00-00
確認數據庫是關閉的,而且datadir,目錄下爲空 $ innobackupex --defaults-file=/opt/mysql/my.cnf --use-memory=16G --copy-back 2018-09-04_20-00-00 |
chown -R mysql.mysql /opt/mysql_data
/opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/my.cnf &
$ mysql -uslave_ali -p'slave_ali_pass' -S /opt/mysql_data/mysql.sock mysql> change master to master_host=MASTER_HOST, master_port=3306, master_user='slave_ali',master_password='slave_ali_pass', master_log_file='mysql-bin.000135', master_log_pos=262484673;
mysql> show slave status\G mysql> start slave; mysql> show slave status\G