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


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容