Linux运维之mysql数据库(主从复制)

Linux运维之mysql数据库(主从复制)

  • 数据库的部署安装

实验环境准备:
两台rhel7.3版本的虚拟机
server1:ip为172.25.11.1 作为master
server2:ip为172.25.11.2 作为slave

自行准备好mysql压缩包
mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

解压并安装

tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
数据库的主从复制(基于ip)

在server1:
编写配置文件作为master

vim /etc/my.cnf
在末尾加入:
server-id=1
log-bin=mysql-bin

在server2:
编写配置文件作为slave

vim /etc/my.cnf
在末尾加入:
server-id=2

server1和server2同时开启mysql并安全初始化

systemctl start mysqld
cat /car/log/mysqld.log | grep password  ##查看mysql密码

mysql_secure_installation 

在server1:

mysql -uroot
show databases;
grant replication slave on *.* to repl@'172.25.11.%' identified by 'Westos+001';
show master status;  ##查看主从复制状态

在server2:

mysql -uroot
show databases;
change master to master_host='172.25.11.1',master_user='repl',master_password='Westos+001',master_log_file='mysql-bin.000002',master_log_pos=690;
start slave;
show slave status\G  ##查看从服务器状态

Slave_IO_Running: Yes
Slave_SQL_Running: Yes		##这两个参数是Yes,表示成功

测试:
在server1上创建库并写入数据

mysql> create database westos;	##在server2上发现也能看到westos库
mysql> use westos
mysql> create table usertb (
    -> username varchar(10) not null,
    -> password varchar(15) not null);	##建表

mysql> desc usertb;	##查看表信息

mysql> insert into usertb values ('user1','123');	##插入数据

mysql> select * from usertb;	##查看

在server2端:

show databases: ##查看在master新创建的库
select * from usertb;
数据库的主从复制(基于gtid)

由于同一事务的GTID在所有节点上的值一致,我们都不需要知道GTID的具体值,‘前提:需要做好前面的binlog复制’

在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步

从服务器连接到主服务器之后,把自己执行过的GTID(Executed_Gtid_Set) 、获取到的GTID(Retrieved_Gtid_Set)发给主服务器,主服务器把从服务器缺少的GTID及对应的transactions发过去补全即可。当主服务器挂掉的时候,找出同步最成功的那台从服务器,直接把它提升为主即可。如果硬要指定某一台不是最新的从服务器提升为主, 先change到同步最成功的那台从服务器, 等把GTID全部补全了,就可以把它提升为主了

设置步骤:
在server1上:
编写配置文件并重启mysqld

vim /etc/my.cnf		

server-id=1
log-bin=mysql-b
gtid_mode=ON
enforce-gtid-consistency=true

systemctl restart mysqld

在server2上:
编写配置文件并重启mysqld

cat /var/lib/mysql/relay-log.info
cat auto.cnf 	##看到server1的uuid
vim /etc/my.cnf		

server-id=2
gtid_mode=ON
enforce-gtid-consistency=true

systemctl restart mysqld

在server2登录数据库

cat relay-log.info	#查看relay-log
mysql -uroot -pWestos+001
mysql> stop slave;  ##关闭之前设定的基于ip的主从复制
mysql> CHANGE MASTER TO		##修改master信息
    -> MASTER_HOST = '172.25.11.1',
    -> MASTER_USER = 'repl',
    -> MASTER_PASSWORD = 'Westos+001',
    -> MASTER_AUTO_POSITION = 1;	##启用gtid,它是自动的

mysql> start slave;

mysql> show slave status\G	##查看状态,可以看到下面两个参数是空的
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 

在server1端登录数据库并写入数据

mysql -uroot -pWestos+001
mysql> use westos;
mysql> insert into usertb values ('user2','123');
mysql> insert into usertb values ('user2','123');

在server2端查看

mysql> show slave status\G
			Retrieved_Gtid_Set: f84e8de1-38a2-11e9-b78c-5254009afece:1-2
            Executed_Gtid_Set: f84e8de1-38a2-11e9
            b78c-5254009afece:1-2		##发现这两个参数变了,从1位置开始复制的
            
mysql> use mysql  #查看gtid模式复制的起始和结束位置

mysql> select * from gtid_executed;

你可能感兴趣的:(Linux运维之mysql数据库(主从复制))