0


MySQL主从复制+读写分离

一、主从复制

1、两台MySQL服务器,一台为主,一台为从(辅助、备份)

192.168.10.166(主)
​192.168.10.130(从)

2、将两台MySQL服务器的时间进行同步,以主为基准

#192.168.10.166(主)的配置
yum -y install ntp
echo "server 127.127.1.0" >> /etc/ntp.conf
echo "fudge 127.127.1.0 stratum 8" >> /etc/ntp.conf
systemctl start ntpd

#192.168.10.130(从)配置
yum -y install ntpdate
ntpdate 192.168.10.166

3、安装MySQL数据库,这里直接使用yum进行安装

#主和从准备工作
yum -y install wget
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
rpm -ivh mysql80-community-release-el7-6.noarch.rpm 
sed -i '5s/0/1/' /etc/yum.repos.d/mysql-community.repo 
sed -i '6s/1/0/' /etc/yum.repos.d/mysql-community.repo 
sed -i '13s/1/0/' /etc/yum.repos.d/mysql-community.repo 
yum -y install mysql-community-server
systemctl start mysqld
#查看日志里面的原始密码
cat /var/log/mysqld.log
#登录MySQL数据库
mysql -uroot -p
#输入刚查询的密码
Enter password:*Loqy&Yeg8Fo
#进入数据库里改密码
alter user user() identified by 'Woniu.123';

4、192.168.10.166(主)服务器配置

#修改MySQL的配置文件
echo "server-id = 11 >> /etc/my.cnf
echo "log_bin = master-bin" >> /etc/my.cnf
echo "log-slave-updates = true" >> /etc/my.cnf
#进入MySQL数据库添加授权
mysql -uroot -pWoniu.123
    #为从服务器添加授权
     grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by 'Wniu.123
     刷新权限
    flush privileges;
    #查看 master 状态,找到 position 字段信息,这里是154
    show master status;  
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#如果用了上面命令没查看到 position 字段信息,重启一下服务就好了
systemctl restart mysqld

5、192.168.10.130(从)服务器配置

#修改MySQL的配置文件
echo "server-id = 22 >> /etc/my.cnf
echo "relay-log = relay-log-bin" >> /etc/my.cnf
echo "relay-log-index = slave-relay-bin.index" >> /etc/my.cnf
systemctl restart mysqld
#登录从服务器的MySQL上,配置同步
change master to master_host='192.168.10.166',master_user='myslave',master_password='Woniu.123',master_log_file='master-bin.000001',master_log_pos=154;
    
    start slave;
    show slave status\G;

Slave_IO_Running: Yes
#此项如果非 Yes 检查连接配置同步 master_log_pos=值 是否与 master 状态的 position 字段一致
Slave_SQL_Running: Yes
#此项如果非 Yes 需要先停止从复制
mysql> stop slave;
mysql> set global sql_slave_skip_counter=1; 
#当出现复制错误时,使用此方式让sql线程跳过遇到错误的事件,一般为1,跳过当前event即可
mysql> start slave;

二、读写分离

1、完成MySQL的主从配置

2、需要有一台新的Linux来部署amoeba

IP:192.168.10.163
  • 先关闭防火墙允许8066端口
firewall-cmd --zone=public --add-port=tcp/8066  
  • 部署jdk,使用的是jdk1.6_14的版本
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
mv jdk1.6.0_14/ /usr/local/jdk1.6
  • 安装amoeba,使用的是2.2.0版本
mkdir amoeba2
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C amoeba2/
mv amoeba2/ /usr/local/amoeba
  • 配置环境变量
echo "export JAVA_HOME=/usr/local/jdk1.6" >> /etc/profile
echo "export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib" >> /etc/profile
echo "export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin" >> /etc/profile
echo "export AMOEBA_HOME=/usr/local/amoeba" >> /etc/profile
echo "export PATH=$PATH:$AMOEBA_HOME/bin" >> /etc/profile
source /etc/profile
#检查jdk是否有安装成功,回显下面内容
/usr/local/jdk1.6/bin/java -version
#下面为回显内容
    java version "1.6.0_14"
    Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
    Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
  • 确定amoeba是否有安装成功
/usr/local/amoeba/bin/amoeba    #直接执行此文件
#回显下面内容表示安装成功
    amoeba start|stop
  • 在主MySQL服务器上进行授权用户
#在主服务器上登录MySQL,授权用户给amoeba服务器使用
grant all on *.* to 'amoebatest'@'192.168.10.%' identified by 'Woniu.123';
  • 修改amoeba主配置文件
vim /usr/local/amoeba/conf/amoeba.xml
    <property name="port">8066</property>        #第11行,amoeba服务器的默认监听端口,客户端在访问时需要使用此端口
    <property name="user">amoeba</property>                #第30行,客户端访问amoeba服务器所使用的用户名
    <property name="password">123456</property>            #第32行,客户端访问amoeba服务器所使用的密码
    <property name="defaultPool">master</property>    #第115行,对数据库的默认操作,指定为主服务器
    <property name="writePool">master</property>    #第118行,对数据库的写操作,指定为主服务器
    <property name="readPool">slaves</property>        #第119行,对数据库的读操作,指定为从服务器,这里是一个集群名称
  • 修改amoeba的后端MySQL数据库服务器配置文件
vim /usr/local/amoeba/conf/dbServers.xml
    <property name="port">3306</property>    #第20行,表示amoeba去连接数据库的端口号
    <property name="schema">woniuxy</property>    #第23行,表示客户机连接进去后的默认数据库
    <property name="user">amoebatest</property> #第26行,前面在主MySQL上授权的用户名
    <property name="password">Woniuxy.1314</property>    #第29行,前面在主MySQL上授权的用户名密码
    <dbServer name="master"  parent="abstractServer">    #第45行,amoeba主配置文件中指定的写操作MySQL服务器名称
    <property name="ipAddress">192.168.88.142</property>    #第48行,写操作MySQL服务器的IP地址
    <dbServer name="slave1"  parent="abstractServer">    #第52行,amoeba主配置文件中指定的读操作MySQL服务器名称
    <property name="ipAddress">192.168.88.145</property> #第55行,读操作MySQL服务器的IP地址
    <dbServer name="slaves" virtual="true">        #第59行,读操作的集群名称,和主配置文件中的名称一致
    <property name="poolNames">slave1</property>    #第65行,集群中的服务器数量,如果有多台,使用逗号分隔
  • 启动amoeba服务器
/usr/local/amoeba/bin/amoeba start
#检测是否启动成功
netstat -anpt         #查看进程,是否有java的进程,如果有表示启动成功
标签: mysql 数据库 java

本文转载自: https://blog.csdn.net/weixin_71794267/article/details/127162338
版权归原作者 小友43 所有, 如有侵权,请联系我们删除。

“MySQL主从复制+读写分离”的评论:

还没有评论