MySQL在线实现主从配置

前提是主库的MySQL开启了Binlog,不然需要修改配置,然后重启MySQL

1.主库配置

[mysqld]
max_allowed_packet=1024M
server-id=1
log-bin=mysql-bin
binlog_format=row

# 必须为FULL,MySQL-5.7后才有该参数
binlog_row_image  = FULL
expire_logs_days  = 15

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

2.从库配置

[mysqld]
max_allowed_packet=1024M
server-id=2
log-bin=mysql-bin
binlog_format=row

# 必须为FULL,MySQL-5.7后才有该参数
binlog_row_image  = FULL
expire_logs_days  = 15

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

3.xtrabackup安装

3.1 Xtrabackup介绍

Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

#常用选项:  
   --host    		指定主机
   --user     		指定用户名
   --password  		指定密码
   --port   	    指定端口
   --databases    	指定数据库
   --incremental 	创建增量备份
   --incremental-basedir 	 指定包含完全备份的目录
   --incremental-dir   	     指定包含增量备份的目录   
   --apply-log        	     对备份进行预处理操作             
   --defaults-file=/etc/my.cnf  指定的备份数据的配置文件
# 一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
   --redo-only      不回滚未提交事务
   --copy-back     恢复备份目录

3.2 下载地址

MySQL版本不同,对应的xtrabackup版本也不同,可以自己选择下载,注意选择Percona XtraBackup
https://www.percona.com/downloads/

3.3 安装

方式一:通过yum安装,yum安装支持的版本是MySQL5.6.24,不知道是否支持5.7.

yum install xtrabackup
 xtrabackup -v #查看版本

注意安装的版本,如下提示即支持5.6
xtrabackup version 2.3.6 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

方式二:通过自己下载rpm包安装。
由于我使用的MySQL是5.7版本的,所以使用该安装包。

下载地址:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

yum -y install rsync perl l perl-Digest-MD5  #需要先安装依赖
yum install  perl-DBD-MySQL # 视情况安装
yum install libev           # 视情况安装
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

4. 全量备份以及配置

#全量备份主库
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password='root' --parallel=4  /root/mysql_back/

#copy备份文件到从库主机
scp -r mysql_back root@hadoop201:/root/mysql_back/

#进入从库所在主机,停止从库,移除data目录
systemctl stop mysqld
cd /root/mysql_back/
mv /var/lib/mysql /var/lib/mysql_old

#应用日志
innobackupex --use-memory=1G --apply-log /root/mysql_back/2022-09-22_00-18-44/

#恢复数据到从库
innobackupex --defaults-file=/etc/my.cnf --move-back /root/mysql_back/2022-09-22_00-18-44/

#修改从库data目录属主,启动从库
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

如果启动systemctl start mysqld报错,查看日志信息:InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
请检查vi /etc/selinux/config
将SELINUX=enforcing 改为 SELINUX=disabled,设置后需要重启才能生效。
临时生效办法:setenforce 0 #临时关闭,重启后又会打开。

5. 主从配置

#主库创建slave账号
mysql -u root -p
GRANT REPLICATION SLAVE ON  *.*  TO  'rep_user'@'%' IDENTIFIED BY 'rep_user';

flush privileges;


#从库操作,查看binlog位置,启动从库slave进程
cat /root/mysql_back/2022-09-22_00-18-44/xtrabackup_binlog_info

#启动从库slave进程
mysql -u root  -p
CHANGE MASTER TO MASTER_HOST='192.168.80.200',MASTER_PORT=3306, MASTER_USER='rep_user',MASTER_PASSWORD='rep_user',MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=924757;

start slave;
show slave status\G;

6. 测试

posted @ 2022-09-22 01:23  硅谷工具人  阅读(66)  评论(0编辑  收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。