[Linux]Day34-20180615【MySQL主从复制】

```
【本节主题:MySQL主从复制】

回顾:
备份还原
mysqldump:仅适用于小数据量的场景
XtraBackup:基于数据块的复制,适用于大数据量的场景
两个线程
??线程
io线程
sql进程
从服务器:不需要启用二进制日志
添加read-only:防止从服务器数据被普通用户更改(无法阻止管理员的写操作)

级联复制:降低主服务器的压力
从服务器启用级联复制:log_slave_updates

实验:实现从服务器的级联复制
(一)主服务器
1、修改主服务器配置文件

vim  /etc/my.cnf
[mysqld]
server_id=1
log_bin
innodb_file_per_table
datadir  =  /data/mysql
systemctl  restart  mariadb

2、授权

-- 
grant  replication  slave  on  *.*  to  repluser@'192.168.30.%'  identified  by  'centos' ;

3、

-- 
show masterid;

(二)级联服务器
1、修改级联服务器配置文件

vim  /etc/my.cnf
[mysqld]
server_id=1;

read-only
# 
systemctl  restart  mariadb

2、开启级联服务器中继日志

vim  /etc/my.cnf
[mysqld]
server-id=2
log_bin
log_slave_updates
read-only
# 
systemctl  restart  mariadb
# 
mysql

3、开启从服务器

-- 
start  slave;
-- 
show  slave  status;

4、清除中继日志,重新从头开始复制

-- 
reset  slave  all;

(三)从服务器
1、修改从服务器的配置文件

扫描二维码关注公众号,回复: 1607265 查看本文章
vim  /etc/my.cnf
[mysqld]
server_id=2
resd-only
systemctl  restart  mariadb

建议:
级联服务器和从服务器都添加read-only,
让数据库的更改只发生在主服务器上!

sync_binlog
设为0:先将数据写到buffer,操作系统会找一个空闲的时间,将buffer中的数据批量写入磁盘
设为1:只要数据发生更改(哪怕是一个字节的更改),立即写入磁盘;效率最低,但是可以保证数据安全
先把事务日志写入buffer,等待1s后写入磁盘

1、主

# 
mysqldump  -A  -F  --single-transaction  --master-data=1  >  /backup/all.sql
# 
scp  /backup/all.sql  192.168.30.27:/backup/

2、从

vim  /backup/all.sql
CHANGE  MASTER  TO  
MASTER_HOST='192.168.30.17'  ,  
MASTER_USER='repluser'  ,  
MASTER_PASSWORD='centos'  ,  
MASTER_PORT=3306  ,  
MASTER_LOG_FILE='mariadb-bin.000003'  ,  
MASTER_LOG_POS=245  ;  

3、主

-- 删除3之前的二进制日志,即:删除1和2
purge  binary  log  to  'mariadb-bin.000003';

主主复制

半同步复制

实验:实现半同步复制
(一)主
1、安装插件

INSTALL  PLUGIN  rpl_semi_sync_master  SONAME  'semisync_master.so' ;

2、启用变量

set  global  rpl_semi_master_enable=1;

(二)从

INSTALL  PLUGIN  rpl_semi_sync_slave  SONAME  'semisync_slave.so' ;

2、启用变量

set  global  rpl_semi_slave_enable=1;

从库设置过滤

-- 
show  variables  like  'replicate_ignore_db';
-- 
stop  slave;
-- 
set  global  replicate_ignore_db=1;

服务器选项:
带 -- ;
服务器变量:
不带 -- ;
可以在命令行中设置,也可以在my.cnf配置文件中设置

从库设置过滤器

vim  /etc/my.cnf
[mysqld]
binlog_ignore_db=mysql
binlog_format=row

statement-base logging :基于语句的日志记录
row-base logging :基于行的日志记录

默认不启用SSL

-- 
show  variable  like  '%ssl%';

如果显示DISABLE则表示未启用SSL功能
如果显示NO则表示不支持,需要重新用源码编译安装!

CA证书、CA私钥
Master证书、Master私钥
Slave证书、Slave私钥

【重要】实战:实现主从SSL加密复制
(一)在CA上执行
1、在CA上生成私钥

openssl  genrsa  2048  >  cakey.pem

2、生成CA自签名证书

openssl  req  -new  -x509  -key  cakey.pem  -out  cacert.pem  -days  3650
CN
beijing
beijing
magedu.com
opt
ca.magedu.com

3、生成Master私钥和请求文件

openssl  req  -newkey  rsa:2048  -days  365  -nodes  -keyout  master.key  >  master.csr
CN
beijing
beijing
magedu.com
opt
master.magedu.com

4、为Master颁发证书

openssl  x509  -req  -in  master.csr  -CA  cacert.pem  -CAkey  cakey.pem  -set_serial  01  >  master.crt

5、生成Slave私钥和请求文件

openssl  req  -newkey  rsa:2048  -days  365  -nodes  -keyout  slave.key  >  slave.csr
CN
beijing
beijing
magedu.com
opt
slave.magedu.com

6、为Slave颁发证书

openssl  x509  -req  -in  slave.csr  -CA  cacert.pem  CAkey  cacert.pem  -set_serial  02  >  slave.crt

7、验证生成的证书

openssl  verify  -CAfile  cacert.pem  master.crt  slave.crt

8、复制文件

scp  -r  /etc/my.cnf.d/ssl/  192.168.30.17:/etc/my.cnf.d
scp  -r  /etc/my.cnf.d/ssl/  192.168.30.27:/etc/my.cnf.d

(二)在Master上执行
1、只保留需要的文件

# 在主服务器上
cd  /etc/my.cnf.d/ssl/
rm  -rf  cakey.pem  slave.*  master.csr

2、修改主库配置文件

# 在主服务器上
vim  /etc/my.cnf
[mysqld]
log_bin
server_id=1
innodb_file_per_table
# 在主服务器上
systemctl  start  mariadb
# 
mysql

3、查看ssl变量是否为YES

-- 
show  variables  like  '%ssl%';

4、创建用户,并强制要求以SSL加密连接

-- 切记:一定要指明 require  ssl “强制要求以SSL方式进行连接”!
grant  replication  slave  on  *.*  to  repluser@'192.168.30.%'  identified  'centos'  require  ssl;

(三)在Slave上执行
1、只保留需要的文件

# 在从服务器上
cd  /etc/my.cnf.d/ssl/
rm  -rf  cakey.pem  master.*  slave.csr

2、修改从库配置文件

# 在从服务器上
vim  /etc/my.cnf
[mysqld]
server_id=2
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key
# 在从服务器上
systemctl  start  mariadb
# 
mysql

3、Change Master

-- 
CHANGE  MASTER  TO  
MASTER_HOST='192.168.30.17'  ,  
MASTER_USER='repluser'  ,  
MASTER_PASSWORD='centos'  ,  
MASTER_PORT=3306  ,  
MASTER_LOG_FILE='mariadb-bin.000002'  ,  
MASTER_LOG_POS=412  ,  
MASTER_CONNECT_RETRY=10  ,  
MASTER_SSL=1  ,  
MASTER_SSL_CA='/etc/my.cnf.d/ssl/cacert.pem'  ,  
MASTER_SSL_CERT='/etc/my.cnf.d/slave.crt'  ,  
MASTER_SSL_KEY='/etc/my.cnf.d/ssl/slave.key'  ;

4、开启同步

-- 
start  slave;

【重要】实战:实现MHA(Master High Avarible)
(一)准备
1、改主机名
Manager:7
Master:17
Slave1:27
Slave2:37
2、所有服务器保证时间同步

vim  /etc/ntp.conf
server  172.20.0.1  iburst
systemctl  start  ntpd
systemctl  enable  ntpd

3、关闭SELINUX,清空iptables规则
???

(二)主
1、修改配置文件

vim  /etc/my.cnf
[mysqld]
server_id=1
log_bin
binlog_format=row
skip_name_resolve
systemctl  start  mariadb
mysql

2、建账号

grant  replication  slave  on *.*  to  repluser

(三)从一
1、修改配置文件

vim  /etc/my.cnf
[mysqld]
server_id=2
read_only
relay_log_purge-0
skip_name_resolve=1
log_bin
systemctl  start  mariadb
mysql

2、CHANGE MASTER

CHANGE  MASTER  TO  
MASTER_HOST='192.168.30.17'  ,  
MASTER_USER='repluser'  ,  
MASTER_PASSWORD='centos'  ,  
MASTER_PORT=3306  ,  
MASTER_LOG_FILE='mariadb-bin.000001'  ,  
MASTER_LOG_POS=245  ;  

3、开启slave

-- 
start  slave;
-- 
show  slave  status;

(四)从二
1、修改配置文件

vim  /etc/my.cnf
[mysqld]
server_id=3
read_only
relay_log_purge-0
skip_name_resolve=1
log_bin
systemctl  start  mariadb
mysql

2、CHANGE MASTER

CHANGE  MASTER  TO  
MASTER_HOST='192.168.30.17'  ,  
MASTER_USER='repluser'  ,  
MASTER_PASSWORD='centos'  ,  
MASTER_PORT=3306  ,  
MASTER_LOG_FILE='mariadb-bin.000001'  ,  
MASTER_LOG_POS=245  ;  

3、开启slave

-- 
start  slave;
-- 
show  slave  status;

(五)主
1、导入hellodb.sql脚本生成数据库

mysql  <  hellodb.sql

2、查看两个从库和主库是否已经同步
???

(六)管理节点
1、生成key

cd
ssh-keygen

2、添加当前主机私钥到key公钥

ssh-copy-id  192.168.30.7

3、将key公钥拷贝分发到三个服务器上(Master、Slave1、Slave2)

# 
scp  -pr  .ssh  192.168.30.17:/root/
# 
scp  -pr  .ssh  192.168.30.27:/root/
# 
scp  -pr  .ssh  192.168.30.37:/root/

(七)主
1、授权账号

mysql
grant  all  on  *.*  to  mhauser@'192.168.30.%'  identified  by  'centos';

(八)从一
1、检查账号是否已经复制

select  user,host  from  mysql.user;

2、确认授权

show  grants  for  mhauser@'192.168.30.%'  ;

(九)在管理节点上安装MHA
1、下载MHA的rpm包
需要下载两个文件:
(1)mha4mysql-manager-0,56-0.rl6.noarch.rpm
(2)mha4mysql-node-0.56-0.el6.noarch.rpm
2、安装MHA

yum  -y  install  mha4mysql*

注意:安装过程依赖epel源
3、将node包拷贝分发到三个服务器上()

# Master
scp  mha4mysql-node-0.56-0.el6.noarch.rpm  192.168.30.17;
# Slave1
scp  mha4mysql-node-0.56-0.el6.noarch.rpm  192.168.30.27;
# Slave2
scp  mha4mysql-node-0.56-0.el6.noarch.rpm  192.168.30.37;

(十)在三个服务器上安装node包(Master、Slave1、Slave2)

yum  -y  install  mha

(十一)管理节点
1、建目录

# 
mkdir  /etc/mha/
# 
vim  /etc/mha/app1.conf

2、修改配置文件

[server  default]
user=mhauser
password=centos
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=centos
ping_interval=1
[server1]
hostname=192.168.30.17
candidate_master=1
[server2]
hostname=192.168.30.27
candidate_master=1
[server3]
hostname=192.168.30.37
candidate_master=1

3、探测(基于key验证)SSL连接是否有问题

masterha_check_ssh  --conf=/etc/mha/app1.conf

4、开启MHA
前台执行:可以使用screen或者nohup

masterha_manager  --conf=/etc/mha/app1.conf

(十二)
???

实验:实现Gelera Cluster
1、添加yum源【在三个服务器上(7、17、27)】

vim  /etc/yum.repos.d/base.repo
[base]
name=CentOS DVD
baseurl=file://misc/cd
gpgcheck=0
[epel]
name=Aliyun EPEL
baseurl=http://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0
enabled=0
[mariadb]
name=MariaDB
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/
gpgcheck=0

2、装包【在三个服务器上(7、17、27)】

yum  install  MariaDB-Galera-server

3、寻找三个文件的位置

# 
rpm  -ql  MariaDB-Galera-server
# (1) /etc/init.d/mysql
# (2) /etc/my.cnf.d/server.cnf
# 
rpm  -ql  galera
# (3) /usr/lib64/galera/libgalera_smm.so

4、修改server配置文件【在三个服务器上(7、17、27)】

vim  /etc/my.cnf.d/server.cnf
[galera]
wsrep_provider=/usr/lib64/galera/libgalera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.30.7,192.168.30.17,192.168.30.27"
binlog_format=row

5、在第一个节点上执行

/etc/init.d/mysql  start  --wsrep-new-cluster

6、其他两个节点的

/etc/init.d/mysql  start

7、
???

```

猜你喜欢

转载自www.cnblogs.com/linyongfeng/p/9189237.html