目錄: 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