十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
主服务器开启二进制日志,从服务器开启中继日志
主服务器日志发生更新后,从服务器通过I/O线程探测到更新并发送请求二进制事件
主服务器通过dump线程将更新的二进制日志事件发送给从服务器
从服务器将事件写入中继日志,通过SQL线程将日志读取为sql语句,重放执行语句,保持数据的统一性
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
';
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml
#修改amoeba配置文件
30修改amoeba 32修改123456 115修改master 117去掉注释–master slaves
2.4 修改数据库配置文件cp dbServers.xml dbServers.xml.bak
vim dbServers.xml
#修改数据库配置文件
23注释掉
以防mysql中没有test库时,会报错26修改test 28-30去掉注释123456 45修改,设置主服务器的名Master48修改,设置主服务器的地址192.168.110.10 52修改,设置从服务器的名slave155修改,设置从服务器1的地址192.168.110.20 58复制上面6行粘贴,设置从服务器2的名slave2和地址192.168.110.30 65修改71修改slave1,slave2 /usr/local/amoeba/bin/amoeba start&
#启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java
#查看8066端口是否开启,默认端口为TCP 8066
三.总结
1以解决问题为前提条件,先添加从库数量,临时把问题给解决,然后抓取slow log ,分析sql语句,该优化就优化处理。慢要不就是硬件跟不上,需要升级;要不就是软件需要调试优化,等问题解决在细化
21.全同步复制
所谓的全同步复制,意思是master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。
2.异步复制
如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。
3.半同步复制
master只保证slaves中的一个操作成功,就返回,其他slave不管。
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元起,快前往官网查看详情吧