1凤巨、搭建mysql服務(wù)器嘴脾,并實現(xiàn)主主復(fù)制男摧、半同步復(fù)制
主主復(fù)制:
第一臺:
yum install mariadb-server
vim?/etc/my.cnf
server-id=1
log_bin=/var/log/mariadb/mysql-bin
relay-log=/var/log/mariadb/relay-log
skip_name_resolve=ON
innodb_file_per_table=ON
auto_increment_offset=1
auto_increment_increment=2
systemctl start mariadb
mysql
show master status;
grant replication slave,replication client on *.* to 'repluser'@'192.168.0.%' identified by 'replpass';
flush privileges;
change master to MASTER_HOST='192.168.0.114',MASTER_PORT=3306,MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=245;
show slave status\G;
start slave;? ? ? ? ? ? ? ? ? ? ? ? ?##等兩臺前面的操作的執(zhí)行完,最后執(zhí)行此條
第二臺:
yum install mariadb-server
vim /etc/my.cnf
server-id=2
log_bin=/var/log/mariadb/mysql-bin
relay-log=/var/log/mariadb/relay-log
skip_name_resolve=ON
innodb_file_per_table=ON
auto_increment_offset=2
auto_increment_increment=2
systemctl start mariadb
mysql
show master status;
grant replication slave,replication client on *.* to 'repluser'@'192.168.0.%' identified by 'replpass';
flush privileges;
change master to MASTER_HOST='192.168.0.113',MASTER_PORT=3306,MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=245;
show slave status\G;
start slave;
在任一臺主機上對數(shù)據(jù)庫進行增刪改的操作译打,再到另一臺看是否同步耗拓,比如:
create dataase testmysql;? ? ? ? ? ?##第一臺操作
show databases;? ? ? ? ? ? ? ? ? ? ? ? ##第二臺查看
半同步復(fù)制:
第一臺:
yum install mariadb-server
vim /etc/my.cnf
server-id=1
log_bin=/var/log/mariadb/mysql-bin
skip_name_resolve=ON
innodb_file_per_table=ON
systemctl start mariadb
mysql
grant replication slave,replication client on *.* to 'repluser'@'192.168.0.%' identified by 'replpass';
flush privileges;
install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
show plugins;
set global rpl_semi_sync_master_enabled=ON;
show global variables like 'rpl%';?
show global status like 'rpl%';? ? ? ? ? ? ? ? ?##從節(jié)點啟用半同步模塊后,查看節(jié)點客戶端信息(從0變?yōu)?)奏司,如果之前有別的復(fù)制模型乔询,需要在從節(jié)點停止io_thread再啟用
第二臺:
yum install mariadb-server
vim /etc/my.cnf
server-id=2
relay-log=/var/log/mariadb/relay-log
skip_name_resolve=ON
innodb_file_per_table=ON
read_only=ON
systemctl start mariadb
mysql
change master to MASTER_HOST='192.168.0.113',MASTER_PORT=3306,MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=245;
install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
show plugins;
set global rpl_semi_sync_slave_enabled=ON;
start slave;
show global variables like 'rpl%';?
show global status like 'rpl%';?
在主節(jié)點上對數(shù)據(jù)庫進行增刪改的操作,再到從節(jié)點看是否同步韵洋,比如:
CREATE TABLE test1(num1 TINYINT,num2 SMALLINT,num3 MEDIUMINT,num4 INT,num5 BIGINT);? ? ? ? ? ? ? ? ##主節(jié)點操作
show tables;? ? ? ? ? ? ? ? ? ? ? ? ##從節(jié)點查看
2竿刁、搭建mysql服務(wù)器,并用mysqldump實現(xiàn)備份還原
yum install mariadb-server
vim /etc/my.cnf
log_bin=/var/log/mariadb/mysql-bin
skip_name_resolve=ON
innodb_file_per_table=ON
systemctl start mariadb
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??##創(chuàng)建新數(shù)據(jù)庫
create databse test1;? ? ? ? ? ? ? ? ? ? ? ? ? ??
use test1;
CREATE TABLE test1(num1 TINYINT,num2 SMALLINT,num3 MEDIUMINT,num4 INT,num5 BIGINT);?
exit;
mysqldump -uroot -hlocalhost -p --all-databases -x -R --triggers -E --master-data=2 --flush-logs > /root/alldb-$(date +%F).sql
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##刪除數(shù)據(jù)庫
drop databse test1;
exit;
mysql -uroot -hlocalhost < /root/alldb-2019-12-07.sql?
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##查看刪除的數(shù)據(jù)庫是否恢復(fù)
show databases;
3麻献、使用xtrabackup實現(xiàn)完全備份们妥,增量備份猜扮,并還原
yum install mariadb-server?xtrabackup
vim /etc/my.cnf
log_bin=/var/log/mariadb/mysql-bin
skip_name_resolve=ON
innodb_file_per_table=ON
systemctl start mariadb
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##修改下數(shù)據(jù)
create database test1;? ?
exit
innobackupex --user=root --host=localhost /root/? ? ? ? ? ? ? ? ? ? ?##先第一次完全備份
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##修改下數(shù)據(jù)
create database test2;
exit
innobackupex --incremental /root/ --incremental-basedir=/root/2019-12-07_20-37-45? ? ? ? ? ? ? ???##第一次增量備份
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???##?修改下數(shù)據(jù)
create database test3;
exit
innobackupex --incremental /root/ --incremental-basedir=/root/2019-12-07_21-15-47? ? ? ? ? ? ? ??##第二次增量備份
mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????##?修改下數(shù)據(jù)
drop database test1;
exit
mysqlbinlog -j 516642 /var/log/mariadb/mysql-bin.000004 > /root/mysql-binlog.sql? ? ? ? ? ? ? ? ? ?##備份二進制文件
systemctl stop mariadb.service? ? ? ? ? ? ? ? ? ? ? ? ? ?##模擬故障
rm -rf /var/log/mariadb/* /var/lib/mysql/*
innobackupex --apply-log --redo-only /root/2019-12-07_20-37-45/? ? ? ? ? ? ? ? ? ? ? ? ? ? ##回滾完全備份勉吻,不提交
innobackupex --apply-log --redo-only /root/2019-12-07_20-37-45/ --incremental-dir=/root/2019-12-07_21-15-47? ? ? ? ?##恢復(fù)第一個增備文件至全備文件中
innobackupex --apply-log --redo-only? /root/2019-12-07_20-37-45/ --incremental-dir=/root/2019-12-07_21-20-07? ? ? ? ?##恢復(fù)第二個增備文件至全備文件中
innobackupex --apply-log /root/2019-12-07_20-37-45? ? ? ? ? ? ? ? ? ?##回滾日志并提交
innobackupex --copy-back /root/2019-12-07_20-37-45? ? ? ? ? ? ? ? ?##將備份還原到 my.cnf 指定的 datadir 中
chown -R mysql.mysql /var/lib/mysql/? ? ? ? ? ? ? ? ? ? ? ?##將恢復(fù)的文件更改屬主屬組
cp /root/mysql-binlog.sql /tmp? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##方便mysql用戶讀取執(zhí)行
systemctl start mariadb.service
mysql
SET sql_log_bin=OFF;
source /tmp/mysql-binlog.sql
show databases;
SET sql_log_bin=ON;
exit
innobackupex --user=root --host=localhost /root/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##恢復(fù)完后,再做一次完全備份
4旅赢、搭建redis齿桃,并說明redis持久化原理
搭建redis:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
systemctl start redis
Redis提供了兩種方式對數(shù)據(jù)進行持久化,分別是RDB和AOF煮盼。RDB是默認(rèn)開啟的持久化方式短纵。RDB持久化方式能夠在指定的時間間隔能對你的數(shù)據(jù)進行快照存儲。AOF持久化方式記錄每次對服務(wù)器寫的操作僵控,當(dāng)服務(wù)器重啟的時候會重新執(zhí)行這些命令來恢復(fù)原始的數(shù)據(jù)香到。
當(dāng)Redis需要保存dump.rdb文件時,服務(wù)器執(zhí)行以下操作:
1.Redis調(diào)用fork()报破,同時擁有父進程和子進程悠就。
2.子進程將數(shù)據(jù)集寫入到一個臨時RDB文件中。
3.當(dāng)子進程完成對新RDB文件的寫入時充易,Redis用新RDB文件替換原來的RDB文件梗脾,并刪除舊的RDB文件。
AOF主要分為兩個步驟:一是對修改命令的實時寫入盹靴,二是對AOF重寫炸茧。AOF重寫是為了減少aof文件的大小瑞妇,可以手動或者自動觸發(fā)。
AOF重寫的執(zhí)行步驟:
1.Redis執(zhí)行fork()梭冠,現(xiàn)在同時擁有父進程和子進程辕狰。
2.子進程開始將新AOF文件的內(nèi)容寫入到臨時文件。
3.對于所有新執(zhí)行的寫入命令控漠,父進程一邊將它們累積到一個內(nèi)存緩存中柳琢,一邊將這些改動追加到現(xiàn)有AOF文件的末尾:這樣即使在重寫的中途發(fā)生停機,現(xiàn)有的AOF文件也還是安全的润脸。
4.當(dāng)子進程完成重寫工作時柬脸,它給父進程發(fā)送一個信號,父進程在接收到信號之后毙驯,將內(nèi)存緩存中的所有數(shù)據(jù)追加到新AOF文件的末尾倒堕。
5、搭建redis爆价,并實現(xiàn)主從復(fù)制
主服務(wù)器:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
systemctl start redis
redis-cli
info replication
set test1 'hello'? ? ? ? ? ? ? ? ? ?##寫數(shù)據(jù)
get test1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##讀數(shù)據(jù)
從服務(wù)器:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
slaveof 192.168.0.113 6379
systemctl start redis
redis-cli? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
info replication? ? ? ? ? ? ? ? ? ? ? ? ? ?##查看信息
get test1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##查看主服務(wù)器的數(shù)據(jù)是否同步過來
set test1 'hello'? ? ? ? ? ? ? ? ? ? ? ##從服務(wù)器不能寫垦巴,只能讀
6、搭建redis集群
搭建3臺redis服務(wù)器铭段,配置一樣:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
cluster-enabled yes
cluster-config-file redis-cluster.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
systemctl start redis
在其中一臺上進行操作骤宣,將替他節(jié)點加入集群,16384個槽位必須分完序愚,不然集群不能成功建立:
redis-cli -h 192.168.0.113 -p 6379 -c cluster addslots {0..5000}
redis-cli -h 192.168.0.114 -p 6379 -c cluster addslots {5001..10000}
redis-cli -h 192.168.0.143 -p 6379 -c cluster addslots {10000..16383}
redis-cli
cluster meet 192.168.0.114 6379
cluster meet 192.168.0.143 6379
cluster info
驗證集群憔披,在第一個節(jié)點測試輸入數(shù)據(jù)不成功,顯示移至第二個節(jié)點爸吮。由于數(shù)據(jù)分散分片存儲芬膝,需要而外增加調(diào)度器才能在任一節(jié)點輸入數(shù)據(jù),而非手動在指定節(jié)點輸入數(shù)據(jù)形娇,redis本身不支持調(diào)度锰霜。