#### 1 MariaDB主从复制原理
1.数据更新,将其写入bin-log文件,bin-log是数据的二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。通过slave服务线程保存在中继日志
3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
#### 2 MariaDB一主一从架构构建
服务器 A:192.168.242.130
服务器B:192.168.242.131
1.查看是否已安装Mariadb:rpm -qa | grep mariadn
2.开始安装:yum install -y mariadb mariadb-server
copy配置文件并覆盖:cp /usr/share/mysql.my-huge.cnf /etc/my.cnf
3.启动mariadb服务:systemctl start mairadb
4.配置Mariadb主从
修改my.cnf配置文件,设置server-id,master节点不需要修改,默认为1
slave节点修改为2,并且重启slave节点:systemctl restart mariadb
在master节点上建立主从复制用户并授权:在master节点上登录mariadb:mysql -uroot - proot
GRANT REPLICATION SLAVE ON *.*{所有权限} TO 'slave'@'%'{用户名为slave,%为任意地址} identified by 'slave';
查询master的状态,看是否配置成功,命令:show master status
5.在slave节点上指定master的信息和binlog文件
命令语法:
CHANGE MASTER TO
MASTER_HOST='master的IP',MASTER_USER='master授权的用户',MASTER_PASSWORD='master授权用户的密码',MASTER_LOG_FILE='master的binlog文件',MASTER_LOG_POS=binlog起始位置;
PS:注意语法逗号前后不要用空格
在slave节点登录mariadb:mysql -uroot -proot
执行命令:
CHANGE MASTER TO
MASTER_HOST='192.168.132.65',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='mysql-bin.000016',MASTER_LOG_POS=1254;
执行成功之后需要重启slave,否则Slave_IO_Running和Slave_SQL_Running显示为No
6.重启
7.重新查看slave状态,Slave_IO_Running和Slave_SQL_Running已变为Yes
命令:show slave statusG
#### 3 MariaDB级联复制
在中间的从服务器启用配置
【mysql】
server-id=18
log_bin
log_slave_updates
read-only
实现中间slave节点能将master的二进制日志在本地数据库进行更新,并且也同时更新本机的二进制,从而实现级联复制。
#### 4 MariaDB半同步复制
默认情况下,Mysql的复制功能是异步,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着主服务器或从服务器端发送故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这个就会造成主服务器和从服务器的数据不一样,甚至在恢复数据时发生丢失。
1.在master实现,启用半同步功能
2.在其他所有slave节点上都实现,启用半同步功能
3.在master上实现,创建数据库,立即成功
4.在master实现,创建数据库,立即成功
5.在所有slave节点实现,停止复制线程
6.在master实现,创建数据库,等待3s才能成功
7.在任意一个slave节点实现,恢复复制线程
8.在master实现,创建数据库,立即成功
#### 5 MariaDB高可用方案MHA
IP地址分别为192.168.130.132-134
MHA 192.168.130.132
master 192.168.130.133
slave1 192.168.130.134
1.在管理节点上安装两个包
yum install -y mha4mysql-manager-.......
yum install -y mha4msqlpnode........
2.在所有MYSQL服务器上安装
yum install -y mha4mysql-node
3.在所有节点实现相互之间ssh key验证
ssh-keygen
ssh-copy-id 192.168.130.132
rsync -av .ssh 192.168.130.133:/root/
rsync -av .ssh 192.168.130.134:/root/
4.在管理节点建立配置文件
mkdir /etc/mastermha/
vim /etc/mastermha/app1.cnf
添上user=mhauser
ssh_user=root #用于实验远程ssh基于key的链接,访问二进制日志
repl_user=repluser #主从复制的用户信息
ping_interval=1 #健康性检查的时间间隔
master_ip_failover_script=/usr/local/bin/master_ip_failover
report_script=/usr/local/bin/sendmail.sh
check_repl_delay=0
[sercerl]
hostname=192.168.130.132
candidate_master=1
[server2]
hostname=192.168.130.133
candidate_master=1
master
[server3]
hostname=192.168.130.134
5.实现master
vim /etc/my.conf
[mysqld]
server_id=1
log-bin
skip_name_resolve=1
general_log
mysql>show master logs
mysql>grant replication slave on *.* to repluser@'192.168.130.%' identified by 'xuziran'
mysql>grant all on *.* to mhauser@'192.168.130.%' identified by 'xuziran';
6.配置vip
ifconfig eth0:1 192.168.130.100/24
7.实现slave
vim /etc/my.cnf
8.检查Mha的环境
masterha_check_ssh --conf /etc/mastermha/app1.cnf
masterha_check_repl --conf=/etc/mastermha/app.cnf
9.启动MHA
开启MHA,默认是前台运行
nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null