第20周

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本身不支持调度。


你可能感兴趣的:(第20周)