1、搭建mysql服务器,并实现主主复制、半同步复制
主主复制:
第一台:
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; ##等两台前面的操作的执行完,最后执行此条
第二台:
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;
在任一台主机上对数据库进行增删改的操作,再到另一台看是否同步,比如:
create dataase testmysql; ##第一台操作
show databases; ##第二台查看
半同步复制:
第一台:
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%'; ##从节点启用半同步模块后,查看节点客户端信息(从0变为1),如果之前有别的复制模型,需要在从节点停止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%';
在主节点上对数据库进行增删改的操作,再到从节点看是否同步,比如:
CREATE TABLE test1(num1 TINYINT,num2 SMALLINT,num3 MEDIUMINT,num4 INT,num5 BIGINT); ##主节点操作
show tables; ##从节点查看
2、搭建mysql服务器,并用mysqldump实现备份还原
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 ##创建新数据库
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 ##删除数据库
drop databse test1;
exit;
mysql -uroot -hlocalhost < /root/alldb-2019-12-07.sql
mysql ##查看删除的数据库是否恢复
show databases;
3、使用xtrabackup实现完全备份,增量备份,并还原
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 ##修改下数据
create database test1;
exit
innobackupex --user=root --host=localhost /root/ ##先第一次完全备份
mysql ##修改下数据
create database test2;
exit
innobackupex --incremental /root/ --incremental-basedir=/root/2019-12-07_20-37-45 ##第一次增量备份
mysql ## 修改下数据
create database test3;
exit
innobackupex --incremental /root/ --incremental-basedir=/root/2019-12-07_21-15-47 ##第二次增量备份
mysql ## 修改下数据
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 ##恢复第一个增备文件至全备文件中
innobackupex --apply-log --redo-only /root/2019-12-07_20-37-45/ --incremental-dir=/root/2019-12-07_21-20-07 ##恢复第二个增备文件至全备文件中
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/ ##将恢复的文件更改属主属组
cp /root/mysql-binlog.sql /tmp ##方便mysql用户读取执行
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/ ##恢复完后,再做一次完全备份
4、搭建redis,并说明redis持久化原理
搭建redis:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
systemctl start redis
Redis提供了两种方式对数据进行持久化,分别是RDB和AOF。RDB是默认开启的持久化方式。RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
当Redis需要保存dump.rdb文件时,服务器执行以下操作:
1.Redis调用fork(),同时拥有父进程和子进程。
2.子进程将数据集写入到一个临时RDB文件中。
3.当子进程完成对新RDB文件的写入时,Redis用新RDB文件替换原来的RDB文件,并删除旧的RDB文件。
AOF主要分为两个步骤:一是对修改命令的实时写入,二是对AOF重写。AOF重写是为了减少aof文件的大小,可以手动或者自动触发。
AOF重写的执行步骤:
1.Redis执行fork(),现在同时拥有父进程和子进程。
2.子进程开始将新AOF文件的内容写入到临时文件。
3.对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有AOF文件的末尾:这样即使在重写的中途发生停机,现有的AOF文件也还是安全的。
4.当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新AOF文件的末尾。
5、搭建redis,并实现主从复制
主服务器:
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
systemctl start redis
redis-cli
info replication
set test1 'hello' ##写数据
get test1 ##读数据
从服务器:
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 ##查看主服务器的数据是否同步过来
set test1 'hello' ##从服务器不能写,只能读
6、搭建redis集群
搭建3台redis服务器,配置一样:
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
在其中一台上进行操作,将替他节点加入集群,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
验证集群,在第一个节点测试输入数据不成功,显示移至第二个节点。由于数据分散分片存储,需要而外增加调度器才能在任一节点输入数据,而非手动在指定节点输入数据,redis本身不支持调度。