MySQL主从复制实现

一主一从
在这里插入图片描述
原理:主服务器收到一个用户的写操作后,开始更新数据库,把更新写到二进制日志中,服务器线程dump thread把二进制日志读出来,通过网络发给从服务器,从服务器的io thread线程发出请求,收到二进制日志后放到relay log中继日志磁盘文件中,然后SQLthread线程从中继日志中读出二进制日志,在本地完成重放,写入/var/lib/mysql/中,更新从服务器的数据。

主从复制的实现
主服务器
192.168.245.17
vim /etc/my.cnf
[mysqld]
log-bin=/data/logbin/mysql-bin
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
binlog_format=row
#skip-grant-tables
innodb_file_per_table
character-set-server=utf8

从服务器
192.168.245.27
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#binlog_format=row
#skip-grant-tables
innodb_file_per_table
character-set-server=utf8
实验开始前先清空数据库文件,主从服务器都清空
rm -rf /var/lib/mysql/*
master主服务器配置
vim /etc/my.cnf.d 写入
log-bin =/data/logbin/mysql-bin
server-id=1

chown -R mysql.mysql /data/logbin/
rm -rf /data/logbin/*
systemctl restart mariadb
mysql
MariaDB [(none)]> show master logs;
MariaDB [(none)]> grant replication slave on . to repluser@‘192.168.245.%’ identified by ‘centos’;
Ctrl-C
[root@centos7 ~]# mysql < hellodb_innodb.sql
mysql
MariaDB [(none)]> show master logs; #可以看到日志增加了

master从服务器配置
vim /etc/my.cnf.d 写入
read-only
server-id=2

rm -rf /var/lib/mysql/*
systemctl restart mariadb
mysql
MariaDB [(none)]>help CHANGE MASTER TO
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST=‘192.168.245.17’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘centos’,
MASTER_PORT=3306,
MASTER_LOG_FILE=’ mariadb-bin.000001’,
MASTER_LOG_POS=245;

show slave status\G
start slave;
show databases; #发现数据库已经被复制过来了
主从复制设置完成

主从从复制
主192.168.245.17
1从192.168.245.27
(log_slave_updates)————此项必须加入中间节点也就是192.168.245.27的/etc/my.cnf.d中
2从192.168.245.37
加上第2台从服务器,和第1台从服务器操作配置一样,第2个从服务器37从第1个从服务器27复制数据
master2从服务器配置
vim /etc/my.cnf.d 写入
read-only
server-id=3

rm -rf /var/lib/mysql/*
systemctl restart mariadb
mysql
MariaDB [(none)]>help CHANGE MASTER TO
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST=‘192.168.245.27’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘centos’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mariadb-bin.000001’,
MASTER_LOG_POS=245;
地址改为中间节点192.168.245.27,其他基本不变
show slave status\G
start slave;
show databases; #发现数据库已经被复制过来了
主从从复制设置完成

主主复制————主服务器出问题的话另一台直接变为主
主1
192.168.245.17
vim /etc/my.cnf.d 写入
server-id=1
log-bin
auto_increment_offset=1
auto_increment_increment=2
主2
192.168.245.27

vim /etc/my.cnf.d 写入
server-id=2
log-bin
auto_increment_offset=2
auto_increment_increment=2

实现:SSL加密同步
创建CA证书
(umask 066;openssl genrsa 2048 > cakey.pem)
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
openssl x509 -in master.crt -noout -text
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt
将证书相关文件复制到从服务器上
scp cacert.pem slave.crt slave.key 192.168.245.27:/etc/my.cnf.d/ssl/
scp cacert.pem slave.crt slave.key 192.168.245.23:/etc/my.cnf.d/ssl/
vim /etc/my.cnf.d 加上
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key

17主服务器上创建ssl认证账户
mysql
grant replication slave on . to rplssl@’192.168.245.%’ identified by ‘centos’ require ssl;

27上用rplssl账户登陆
mysql -urplssl -pcentos -h192.168.245.17 –ssl-ca=/ec/my.cnf.d/ssl/cacert.pem –ssl-cert=/etc/my.cnf.d/ssl/slave.crt –ssl-key=/etc/my.cnf.d/ssl/slave.key
登陆成功
输入status可以看到ssl加密方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是一种常见的数据库高可用方案,可以提高系统的可靠性和可用性。下面是实现MySQL主从复制的步骤: 1. 配置主服务器 在主服务器上修改 my.cnf 配置文件,开启二进制日志记录功能: ``` log-bin=mysql-bin ``` 重启 MySQL 服务使其生效。 2. 创建复制用户 在主服务器上创建一个用于复制的用户,授予 REPLICATION SLAVE 权限: ``` CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 3. 查看主服务器状态 在主服务器上执行以下命令,查看当前二进制日志的名称和位置: ``` SHOW MASTER STATUS; ``` 记下 File 和 Position 的值,这将在后面的从服务器配置中使用。 4. 配置从服务器 在从服务器上修改 my.cnf 配置文件,指定主服务器的地址和端口号: ``` server-id=2 relay-log=mysql-relay-bin replicate-do-db=mydb master-host=192.168.1.1 master-port=3306 master-user=repl master-password=password ``` 其中 server-id 为从服务器的唯一标识,relay-log 指定从服务器的中继日志,replicate-do-db 指定需要复制的数据库名称,master-host、master-port、master-user 和 master-password 分别是主服务器的地址、端口号、用户名和密码。 5. 启动从服务器 在从服务器上启动 MySQL 服务,等待复制开始。 6. 开始复制 在从服务器上执行以下命令,开始复制: ``` START SLAVE; ``` 执行成功后,从服务器会连接到主服务器进行复制。在主服务器上进行的所有更改都会被记录到二进制日志中,并复制到从服务器。 7. 检查复制状态 在从服务器上执行以下命令,查看复制状态: ``` SHOW SLAVE STATUS\G; ``` 如果复制正常进行,Slave_IO_Running 和 Slave_SQL_Running 值都为 Yes。如果出现错误,可以查看 Last_Error 和 Last_IO_Error 字段,确定问题所在。 以上就是 MySQL 主从复制实现步骤。需要注意的是,在进行主从复制时,主服务器上所有更改都会被复制到从服务器,包括误操作、删除数据等。因此,在使用主从复制时,需要谨慎操作,确保数据的完整性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值