MySQL主从复制-创新互联

文章目录
  • 一.主从复制
    • 1.原理
    • 2.部署过程
      • 2.1 主服务器
      • 2.2从服务器
  • 二.读写分离
    • 1.原理
    • 2.部署过程
      • 2.1 安装amoeba环境
      • 2.2配置 Amoeba读写分离
      • 2.3amoeba服务器配置amoeba服务
      • 2.4 修改数据库配置文件
  • 三.总结
    • 1
    • 2
    • 3

创新互联专业为企业提供龙泉网站建设、龙泉做网站、龙泉网站设计、龙泉网站制作等企业网站建设、网页设计与制作、龙泉企业网站模板建站服务,十年龙泉做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。一.主从复制 1.原理

主服务器开启二进制日志,从服务器开启中继日志
主服务器日志发生更新后,从服务器通过I/O线程探测到更新并发送请求二进制事件
主服务器通过dump线程将更新的二进制日志事件发送给从服务器
从服务器将事件写入中继日志,通过SQL线程将日志读取为sql语句,重放执行语句,保持数据的统一性

在这里插入图片描述

2.部署过程 2.1 主服务器
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname Mysql1

vim /etc/my.cnf
	server-id = 1
	log_bin = master-bin
	log-slave-updates = true

systemctl restart mysqld.service 
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

mysql -uroot -pabc123
	grant replication slave on *.* to 'myslave'@'192.168.110.%' identified by 'abc123';
	grant all privileges on *.* to 'mha'@'192.168.110.%' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
	flush privileges;
	show master status;
	}
2.2从服务器
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname Mysql2

vim /etc/my.cnf
	server-id = 2
	log_bin = master-bin
	relay-log = relay-log-bin
	relay-log-index = slave-relay-bin.index

systemctl restart mysqld.service 
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

mysql -uroot -pabc123
	grant replication slave on *.* to 'myslave'@'192.168.110.%' identified by 'abc123';
	grant all privileges on *.* to 'mha'@'192.168.110.%' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
	flush privileges;
	change master to master_host='192.168.110.10',master_user='myslave',master_password='abc
123',master_log_file='master-bin.000001',master_log_pos=915; 
	start slave;
	}
二.读写分离 1.原理

通过amoeba代理服务器,实现只在主服务器上写,只在从服务器上读,主数据库处理事务性查询,从数据库处理select查询,数据库复制被用来把事务查询导致的变更同步的集群中的从数据库

在这里插入图片描述

2.部署过程 2.1 安装amoeba环境
因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,
高版本不建议使用。
 
将jdk-6u14-linux-x64.bin 和 amoeba-mysql-binary-2.2.0.tar.gz.0 
上传到/opt目录下。
 
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
 
cd /usr/local/
chmod +x jdk-6u14-linux-x64.bin 
./jdk-6u14-linux-x64.bin
按空格到最后一行,按yes,按回车。
 
mv jdk1.6.0_14/ /usr/local/jdk1.6
 
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
#在末尾加入
 
source /etc/profile
java -version
 
##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop 说明安装成功
2.2配置 Amoeba读写分离

在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问

grant all on.to test@‘192.168.110.%’ identified by 'abc123
';

2.3amoeba服务器配置amoeba服务
cd /usr/local/amoeba/conf/
 
cp amoeba.xml amoeba.xml.bak
 
vim amoeba.xml                  
#修改amoeba配置文件
 
30修改amoeba32修改123456115修改master117去掉注释–masterslaves
2.4 修改数据库配置文件
cp dbServers.xml dbServers.xml.bak
 
vim dbServers.xml               
#修改数据库配置文件
 
23注释掉
以防mysql中没有test库时,会报错26修改test28-30去掉注释12345645修改,设置主服务器的名Master48修改,设置主服务器的地址192.168.110.1052修改,设置从服务器的名slave155修改,设置从服务器1的地址192.168.110.2058复制上面6行粘贴,设置从服务器2的名slave2和地址192.168.110.3065修改71修改slave1,slave2/usr/local/amoeba/bin/amoeba start&         
#启动Amoeba软件,按ctrl+c 返回
 
netstat -anpt | grep java             
#查看8066端口是否开启,默认端口为TCP 8066
三.总结 1

以解决问题为前提条件,先添加从库数量,临时把问题给解决,然后抓取slow log ,分析sql语句,该优化就优化处理。慢要不就是硬件跟不上,需要升级;要不就是软件需要调试优化,等问题解决在细化

2

1.全同步复制
所谓的全同步复制,意思是master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。
2.异步复制
如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。
3.半同步复制
master只保证slaves中的一个操作成功,就返回,其他slave不管。

3

mysql主从复制不同步的处理方法
方法1:该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况

首先进入master库,查看进程是否sleep太多,还有状态是否正常,然后在从slave上查看,IO线程和SQL线程是否正常。如果不正常,则停止slave,然后set globai sql_slave_skip_counter=1(跳过一个事物);再重新启动slave,再用show slave status \G;查看,如果IO线程和SQL线程均为yes,那么主从同步状态恢复正常

方法2:
1.先进入主库,进行锁表,防止数据写入 。使用命令: flush tables with read lock;
2.进行数据备份 。把数据备份到mysql.bak.sql文件 ,使用命令:mysqldump -uroot -p -hlocalhost >mysql.bak.sql
3.查看master 状态 。使用命令:show master status;
4 .把mysql备份文件传到从库机器,进行数据恢复 。使用命令:scp mysql.bak.sql root@192.168.128.101:/tmp/
5.停止从库的状态 。使用命令:stop slave;
6 .然后到从库执行mysql命令,导入数据备份。使用命令:source /tmp/mysql.bak.sql
7 .设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项
change master to master_host = ‘192.168.128.100’, master_user = ‘rsync’, master_port=3306, master_password=‘’, master_log_file = ‘mysqld-bin.000001’, master_log_pos=3260;
8 .重新开启从同步 。使用命令:start slave;
9 .查看同步状态 。使用命令:show slave status\G ;如果IO线程和SQL线程均为yes时,则主从可同步。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前文章:MySQL主从复制-创新互联
标题URL:http://ybzwz.com/article/deochs.html