1.主从复制(基于position)
准备两台虚拟机server1做master节点,server2做slave节点,将数据库安装包复制上去。
在server1(master)上进行配置
yum install -y *.rpm安装mysql
vim /etc/my.cnf (主节点数据库配置文件)
文件最后添加:
log-bin=mysql-bin
server-id=1
systemctl start mysqld(重启服务)
服务开启后自动生成密码,需要用自动生成的密码进行安全初始化,并设置新密码。
mysql_secure_installation(安全初始化)
此处使用初始密码登录,设置root密码
其他都选yes
mysql -uroot -pWestos+123
show databases;
CREATE USER 'repl'@'172.25.12.%' IDENTIFIED BY 'Westos+123';(创建用户用于远程登录数据库)
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.25.12.%';(授权为可以复制master节点数据的slave节点)
flush privileges;刷新
show master status;查看master节点的状态
mysql -h 172.25.12.1 -urepl -pWestos+123
看能否登录查看数据库(可以登录,但是没有查看的权限)
在server2主机上面(slave)进行配置
解压安装数据库
vim /etc/my.cnf开始配置备节点数据库
在最后面写入:
server-id=2
systemctl start mysqld
cat /var/log/mysqld.log | grep password复制密码
mysql_secure_installation进行安全初始化
利用初始密码登录,设置root密码
现在设置mysql的主从复制:
mysql> CHANGE MASTER TO在这个slave节点上面设置管理它的master节点
-> MASTER_HOST='172.25.12.1',主机信息
-> MASTER_USER='repl',用户
-> MASTER_PASSWORD='Westos+123',密码
-> MASTER_LOG_FILE='mysql-bin.000002',基于position的主从复制的重要信息
-> MASTER_LOG_POS=1567;基于position的主从复制的重要信息
start slave;开启本节点的slave
show slave status\G;查看slave节点的状态
[root@server2 ~]# mysql -p
##查看所有的库
mysql> SHOW DATABASES;
##配置主库的信息
mysql> CHANGE MASTER TO MASTER_HOST='172.25.12.1', ##主库的ip地址
MASTER_USER='repl', ##主库的用户
MASTER_PASSWORD='Westos+123', ##主库用户的密码
MASTER_LOG_FILE='mysql-bin.000002', ##主库的日志文件
MASTER_LOG_POS=1567; ##主库的状态码
mysql>
mysql> START SLAVE; ##开启从库
查看从库状态
mysql> SHOW SLAVE STATUS\G ##可以看到的当前两个进程都是yes,表示主库和从库的数据一致
在server1上创建数据库并添加内容
[root@server1 mysql]# mysql -p
mysql> CREATE DATABASE test; ##创建数据库test
mysql> USE test; ##进入到数据库test
mysql> SHOW TABLES; ##查看表
mysql> CREATE TABLE redhat ( ##创建表redhat
-> username varchar(10) not null,
-> password varchar(15) not null);
mysql> DESC redhat; ##查看表的结构
mysql> INSERT INTO usertd VALUES ('user1','123'); ##向表中插入信息
mysql> SELECT * FROM usertd; ##查看表的所有信息
create database westos;
use westos;
mysql> create table usertb(
-> username varchar(10) not null,
-> password varchar(20) not null);
desc usertb;
此时在server2上可以看见创建的表,在server1表中添加内容可以发现在sever2中可以同步。
2.gtid的主从复制
在server1(master)上面进行配置
vim /etc/my.cnf
gtid_mode=ON
enforce-gtid-consistency=true #添加gtid的信息
mysql -uroot -pWestos+123
use mysql;
select * from gtid_executed; #查看内容
cd /var/lib/mysql
mysqlbinlog mysql-bin.000002
cat auto.cnf #查看改节点的uuid
systemctl restart mysqld
在server2(slave节点)上面进行配置
vim /etc/my.cnf
gtid_mode=ON
enforce-gtid-consistency=true#添加gtid的信息
systemctl restart mysqld
mysql -uroot -pWestos+123
show databases;
stop slave;
change master to master_host='172.25.12.1',master_user='repl',master_password='Westos+123',master_auto_position=1;
start slave;
show slave status\G;
在server1上面写入数据
show databases;
use westos
insert into usertb values ('user2','123');
insert into usertb values ('user3','123');
在server2上面查看gtid的信息
show slave status\G;
在server1上面查看gtid的信息
use mysql
select * from gtid_+executed;
在server2上面查看复制过来的数据
use mysql
select * from mysql.gtid_executed;
发现slave完成了master的所有事件