MySQL復制

目錄:
1.備份與恢復
2.主從復制
3.主主復制
4.半同步復制
5.MHA
6.centos7搭建mariadb Galera集群

1.備份和恢復

備份工具:mysqldump+復制binlog
         xtrabackup

(1) mysqldump+復制binlog

備份:

mysqldump -E -R –triggers –master-data=2 –flush-logs –single-transaction –databases hellodb > /tmp/backup

恢復:

mysql < /tmp/backup

時間點還原:

mysqlbinlog –start-position=245 /tmp/log.100004 > /tmp/backup

mysql < /tmp/backup

–flush-log:滾動一下日志,以方便用二進制日志文件進行時間點還原

–single-transaction:mysqldump熱備時需要執行此選項,備份是啟用一個大的事務完成的備份(在常用的兩種數據庫引擎中,myisam僅支持溫備,innodb支持熱備)

–databases:指定備份哪一個數據庫

MyISAM:支持溫備,鎖定備份庫而后啟動備份操作
InnoDB:支持熱備
        -E:--event 備份指定庫相關的所有事件 

        -R:--routiness 備份指定數據庫相關的存儲過程和存儲函數 

        –triggers:備份表相關的觸發器 

        –master-data=#:0不使用,1記錄為master to
注意:二進制日志文件不應該與數據文件放在同一磁盤上
 (2) xtrabackup

# yum install percona-xtrabackup-2.3.2-1-el7.x86_64.rpm

完全備份:
innobackupex --user= --password= /path/to/backup/dir
# innobackupex --user=root /backups/

還原:
# scp /backups/2017-11-21_12-00-30/  node3:/root
# innobackupex --apply-log /backups/2017-11-21_12-00-30/     整理
    Complete OK !
# innobackupex --apply-back /backups/2017-11-21_12-00-30/    恢復
?   Complete OK !
# cd /data/mysql
# chown -R mysql.mysql /data/mysql/*

增量備份:

innobackupex –incremental /backups/ –incremental-basedir=/backups/2017-11-21_12-00-30/

恢復:

innobackupex –redo-only –apply-log /backups/2017-11-21_12-00-30/

innobackupex –redo-only –apply-log /backups/2017-11-21_12-00-30/ –-incremental-dir=/backups/2017-11-21_12-15-35/

innobackupex –copy-back /backups/2017-11-21_12-00-30/

–databases:指明備份哪個庫,到哪個位置即可

–incremental:指明這次增量備份

–incremental-basedir:指明以那一次為基礎的增量

–incremental-dir:指明增量備份是哪一個

–copy-back:代表還原,要注意的是指明的目錄為完全備份的目錄

2.主從復制

主節點:①啟用二進制 ②為當前節點設置一個全局唯一的ID號 ③創建有復制權限的用戶

從節點:①啟用中繼日志 ②為當前節點設置一個全局唯一的ID號 ③使用有復制權限的用戶連接主服務器,并啟用復制線程

(1)主節點:
# vim /etc/my.cnf

在[mysqld]段的最后面添加如下內容

innodb_file_per_table = ON
skip_name_resolve = ON
server-id = 1
log-bin = master-log

# systemctl start mariadb.service 

# mysql
    > show global variables like '%log%';
    > show master logs;
    > show global variables like '%server%';
    > grant replication slave,replication client on *.* to ‘repluser’@’192.168.1.%’ identified by ‘replpass’;
    > flush privileges; 

2.從節點

# vim /etc/my.cnf
在[mysqld]段的最后面添加如下內容
innodb_file_per_table = ON
skip_name_resolve = ON
server-id = 5 
relay-log = relay-log
read-only = 1
relay-log-purge = 0

# systemctl start mariadb.service
# mysql
    > change master to master_host=’192.168.1.32′,master_user=’repluser’,master_password=’replpass’,
      master_log_file=’master-bin.000001′,從那個二進制日志文件復制
      master_log_pos=245;
    > show slave status\G;                查看自己的從信息
    > start slave;                        啟動復制線程
    > show slave status\G;

驗證:主節點:> create database mydb;
            > show databases;

     從節點:> show databases;
注意:主從復制要關閉selinux
     iptables -F
     網絡要通,可以用ping或telnet
主從同步出現問題,可參考此文檔http://www.linuxidc.com/Linux/2012-03/57708.htm

3.主主復制:

   互為主從
     ① 各節點使用唯一server-id
     ② 都啟動binary log和relay log
     ③ 創建擁有復制權限的用戶賬號
     ④ 定義自動增長id字段的數值范圍為奇偶
     ⑤ 均把對方指定為主節點,并啟動復制線程

# vim /etc/my.cnf

主mysql主機操作:

在[mysqld]段的最后添加以下內容

skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 1                         id號不能跟從服務器相同
log-bin = master-bin                  自定義主服務器的二進制日志文件名
relay-log = relay-log                 自定義從服務器的二進制日志文件名
auto_increment_offset = 1
auto_increment_increment = 2

另個主mysql主機操作:

在[mysqld]段的最后添加以下內容

skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 5
relay-log = relay-log
lob-bin = master-bin
auto_increment_offset = 2
auto_increment_increment = 2

2.授權具有復制權限的用戶,指定master節點

主mysql主機操作:

(1)授權

grant replication slave,replication client on *.* to ‘repluser’@’192.168.1.%’ identified by ‘replpass’;

(2)先在另個主mysql上查看節點

show master status\G;

(3)指定節點

change master to master_host=’192.168.1.33′,master_user=’repluser’,master_password=’replpass’,master_log_file=’master-bin.000001′,master_log_pos=245;

另個主mysql主機操作:

(1)授權

grant replication slave,replication client on *.* to ‘repluser’@’192.168.1.%’ identified by ‘replpass’;

(2)先在另個主mysql上查看節點

show master status\G

(3)指定節點

change master to master_host=’192.168.1.32′,master_user=’repluser’,master_password=’replpass’,master_log_file=’master-bin.000002′,master_log_pos=245;

4.半同步復制:?

1.同樣配置為主從復制,配置文件也同主從復制(my.cnf)
2.安裝rplsemisync_master插件,并啟用

主節點:

# mysql

    > install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
    > set global rpl_semi_sync_master_enabled = 1;
    > show plugins;    查看可用插件

從節點:

# mysql

     > install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
     > set global rpl_semi_sync_slave_enabled = 1;
     > start slave;
     > show slave status\G;

5.MHA:

node1:MHA Manager               //192.168.1.31
node2:MariaDB master            //192.168.1.33
node3:MariaDB slave             //192.168.1.35
node4:MariaDB slave             //192.168.1.47

1.將node2與node3配置為主從復制節點,將node2與node4配置為半同步復制
2.在master節點上創建一個管理mysql的用戶 
     > grant all on *.* to ‘mhuser’@’192.168.1.%’ identified by ‘mhapass’;
3.配置4個主機間能基于ssh互相通信
node1:
# ssh-keygen -t rsa -P ”         創建私鑰 
# cat .ssh/id_rsa.pub > .ssh/authorized_keys       覆蓋     
# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub node2:/root/.ssh/ 
# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub node3:/root/.ssh/ 
# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub node4:/root/.ssh/ 
測試:# ssh node2 'ifconfig'
     # ssh node3 'ifconfig'
     # ssh node4 'ifconfig'

4.下載安裝MHA
node1:
# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm 

node2&3&4
# yum install mha4mysql-node-0.56-0.el6.noarch.rpm

5.配置MHA

# vim /etc/masterha/app1.cnf

[server default]

user=mhauser       //mysql的管理用戶
password=mhapass       //mysql的管理用戶的密碼
manager_workdir=/data/masterha/app1         //manager的工作路徑,會自動創建
manager_log=/data/masterha/app/manager.log         //manager日志文件
remote_workdir=/data/masterha/app             //遠程主機的工作目錄
ssh_user=root
repl_user=repluser
repl_password=replpass
ping_intervarl=1                           //心跳信息傳遞間隔

[server1]
hostname=192.168.1.33
ssh_port=22
candidate_master=1                        //將來這個節點是否參與成為主節點

[server2]

hostname=192.168.1.35
ssh_port=22
candidate_master=1

[server3]

hostname=192.168.1.47
ssh_port=22
candidate_master=1
6.檢測各節點間ssh互相通信配置是否OK,檢查管理的mysql復制集群的連接配置參數是否OK

# masterha_check_ssh –conf=/etc/masterha/app1.cnf

# masterha_check_repl –conf=/etc/masterha/app1.cnf

啟動MHA

masterha_manager –conf=/etc/masterha/app1.cnf

7.測試

node2: # killqll mysqld mysqld_safe

node4:  > show slave status\G;             主節點發生變化


6.centos7搭建mariadb Galera集群
node1 IP:192.168.1.32
node2 IP:192.168.1.33
node3 IP:192.168.1.35

node1:
# vim /etc/yum.repos.d/galera.repo 
[galera]
name=galera
baseurl=http://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.57/yum/centos7-amd64/
gpgcheck=0
# scp /etc/yum.repos.d/galera.repo 192.168.1.33:/etc/yum.repos.d/
# scp /etc/yum.repos.d/galera.repo 192.168.1.35:/etc/yum.repos.d/

node1&2&3:
# yum isntall MariaDB-Galera-server -y

node1:
# rpm -ql galera | grep -i smm.so
     /usr/lib64/galera/libgalera_smm.so
# vim /etc/my.cnf.d/server.cnf
[galera]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.32,192.168.1.33,192.168.1.35"
binlog_format=row                    //二進制日志格式
default_storage_engine=InnoDB        //默認引擎
innodb_autoinc_lock_mode=2           //鎖格式
bind-address=0.0.0.0                 //監聽地址
wsrep_cluster_name="galera_cluster"   //集群名稱
wsrep_slave_threads=1                 //復制線程
innodb_flush_log_at_trx_commit=0      //是否在每次事務提交時都刷新事務日志
# scp /etc/my.cnf.d/server.cnf node2:/etc/my.cnf.d/server.cnf
# scp /etc/my.cnf.d/server.cnf node3:/etc/my.cnf.d/server.cnf
首次啟動時,需要初始化集群,在其中一個節點執行
# /etc/init.d/mysql start --wsrep-new-cluster

node2&3:
# /etc/init.d/mysql start
        SUCCESS!

node1:
# mysql
     > create database mydb;
     > show databases;
node2:
# mysql
     > show databases;



原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/88767

(0)
nenenene
上一篇 2017-11-21
下一篇 2017-11-21

相關推薦

  • 馬哥教育網絡班20期+第5周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep '^[[:space:]]\+' /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至…

    系統運維 2016-07-12
  • 第三周 磁盤文件系統進階

    文件系統的使用:     首先要“掛載”:mount 命令和umount命令     根文件系統這完的其他文件系統要想能夠訪問, 都必須通過“關聯”至根文件上的某個目錄來實現,次關聯操作即為“掛載”;此目錄幾位“掛載點”;     掛載點:mount-point,用于做為另一個文件系統的訪問入口; …

    Linux干貨 2016-11-22
  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 答:who | cut -f 1 -d " " | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 答:who | tail -n 1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 答:cut -f7 -d: …

    Linux干貨 2016-11-25
  • CentOS程序安裝的3種方式{ 源碼包安裝 | rpm包安裝 | yum安裝;}

    CentOS程序安裝的3種方式{ 源碼包安裝 | rpm包安裝 | yum安裝;} CentOS軟件安裝主要由3種方式,第一種是源碼包安裝,需要從網站下載并解壓之后通過手動編譯的方式安裝,過程相對比較復雜;第二種是rpm包安裝,通過rmp這個包管理器實現程序的安裝、升級、卸載等操作,rpm包管理器是RPM Package Manager的簡稱,功能非常強大,…

    Linux干貨 2016-08-24
  • linux上的LVM簡明教程

    LVM是一個多才多藝的硬盤系統工具。在Linux上非常的好用,傳統分區使用固定大小分區,重新調整大小十分麻煩。但是,LVM可以創建和管理“邏輯”卷,而不是直接使用物理硬盤。可以讓管理員彈性的管理邏輯卷的擴大縮小,操作簡單,而不損壞已存儲的數據??梢噪S意將新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷。 首先是實際的物理磁盤及其劃分的分區和其上的物理卷(PV…

    Linux干貨 2017-05-02
欧美性久久久久