Mariadb 主从复制&读写分离

Mariadb 主从复制&读写分离

Acha
2021-07-19 / 0 评论 / 145 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年07月19日,已超过497天没有更新,若内容或图片失效,请留言反馈。

数据库 主从&读写分离

节点规划

IP 主机名 节点
10.35.172.77 mysql1 主数据库节点
10.35.172.78 mysql2 从数据库节点
10.35.172.79 mycat 数据库中间件节

1、基础环境搭建

### mysql1
# 修改主机名
[root@mysql1 ~]# hostnamectl set-hostname mysql1
# 配置解析文件
[root@mysql1 ~]# echo "10.35.172.77 mysql1
10.35.172.78 mysql2" >> /etc/hosts
# 关闭 selinux&防火墙
[root@mysql1 ~]# setenforce 0
[root@mysql1 ~]# systemctl stop firewalld
# SecureXF上传 mariad-repo.tar.gz && 解压到 /opt
[root@mysql1 ~]# tar -zxvf mariadb-repo.tar.gz -C /opt
# 配置yum源
[root@mysql1 ~]# mkdir /etc/yum.repo.d/bak
[root@mysql1 ~]# mv /etc/yum.repo.d/* /bak
[root@mysql1 ~]# echo "[mariadb]
name=mariadb
baseurl=file:///opt/mariadb-repo
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=ftp://10.35.172.81/centos
gpgcheck=0
enabled=1" > /etc/yum.repos.d/local.repo 

### mysql2
[root@mysql2 ~]# hostnamectl set-hostname mysql2
[root@mysql2 ~]# echo "10.35.172.77 mysql1
10.35.172.78 mysql2" >> /etc/hosts
[root@mysql2 ~]# setenforce 0
[root@mysql2 ~]# systemctl stop firewalld
# SecureXF 上传 mariad-repo.tar.gz
[root@mysql1 ~]# tar -zxvf mariadb-repo.tar.gz -C /opt
[root@mysql2 ~]# mkdir /etc/yum.repo.d/bak
[root@mysql2 ~]# mv /etc/yum.repo.d/* /bak
[root@mysql2 ~]# echo "[mariadb]
name=mariadb
baseurl=file:///opt/mariadb-repo
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=ftp://10.35.172.81/centos
gpgcheck=0
enabled=1" > /etc/yum.repos.d/local.repo 

### mycat
[root@mycat ~]# hostnamectl set-hostname mycat
[root@mycat ~]# setenforce 0
[root@mycat ~]# systemctl stop firewalld
[root@mycat ~]# mkdir /etc/yum.repo.d/bak
[root@mycat ~]# mv /etc/yum.repo.d/* /bak
# SecureXF 上传 mariad-repo.tar.gz
[root@mycat ~]# tar -zxvf mariadb-repo.tar.gz -C /opt
[root@mycat ~]# echo "[mariadb]
name=mariadb
baseurl=file:///opt/mariadb-repo
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=ftp://10.35.172.81/centos
gpgcheck=0
enabled=1" > /etc/yum.repos.d/local.repo 

2、安装服务

# 安装 mariadb 并启动
[root@mysql1 ~]# yum install -y mariadb mariadb-server
[root@mysql1 ~]# systemctl start mariadb && systemctl enable mariadb

[root@mysql2 ~]# yum install -y mariadb mariadb-server
[root@mysql2 ~]# systemctl start mariadb && systemctl enable mariadb

# 初始化mariadb
[root@mysql1 ~]# mysql_secure_installation 
## 注意:Disallow root login remotely? [Y/n] n
##      其他为 yes ;密码设置为 000000

[root@mysql2 ~]# mysql_secure_installation 
## 注意:Disallow root login remotely? [Y/n] n
##      其他为 yes ;密码设置为 000000

# 安装JDK & 查看JDK版本
[root@mycat ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@mycat ~]# java -version

# 二进制安装 mycat
## SecureXF 上传 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mycat ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

# 配置环境变量
[root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
[root@mycat ~]# source /etc/profile

3、配置服务

### 主从复制
# mysql1
[root@mysql1 ~]# vi/etc/my.cnf.d/server.cnf
# 在 [mysqld]标签下添加
log_bin = mysql-bin           #记录操作日志
binlog_ignore_db = mysql      #不同步mysql系统数据库
server_id = 77                #数据库集群中的每个节点id都要不同
# 重启数据库
[root@mysql1 ~]# systemctl restart mariadb
# 进入数据库并配置
[root@mysql1 ~]# mysql -uroot -p000000
MariaDB [(none)]> grant all privileges  on *.* to root@'%' identified by "000000";
MariaDB [(none)]> grant replication slave on *.* to 'user'@'mysql2' identified by '000000';

# mysql2
[root@mysql2 ~]# vi/etc/my.cnf.d/server.cnf
# 在 [mysqld]标签下添加
log_bin = mysql-bin
binlog_ignore_db = mysql
server_id = 78
[root@mysql2 ~]# systemctl restart mariadb
[root@mysql2 ~]# mysql -uroot -p000000
MariaDB [(none)]> change master to master_host='mysql1',master_user='user',master_password='000000';

### 读写分离
# mycat
# schema.xml配置文件 ;将原内容替换为下面文字
[root@mycat ~]# vi /usr/local/mycat/conf/schema.xml 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema> 
<dataNode name="dn1" dataHost="localhost1" database="test" />  
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1"  slaveThreshold="100">  
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="172.30.11.12:3306" user="root" password="000000">
        <readHost host="hostS1" url="172.30.11.13:3306" user="root" password="000000" />
    </writeHost>
</dataHost>
</mycat:schema>
# 修改配置文件权限
[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml
# 编辑mycat的访问用户
[root@mycat ~]# vi /usr/local/mycat/conf/server.xml 
# 在配置文件的最后部分,修改 password schemas
<user name="root">
        <property name="password">000000</property>
        <property name="schemas">USERDB</property
# 然后删除如下几行:
<user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
</user>
# 启动Mycat服务
[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start

4、验证

### 主从复制
# mysql2
# 登录查询主从状态
[root@mysql2 ~]# mysql -uroot -p000000
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G

# mysql1 创建库test,并在库test中创建表company,插入表数据
[root@mysql1 ~]# mysql -uroot -p000000
MariaDB [(none)]> create database test;
MariaDB [(none)]> use test;
MariaDB [test]> create table company(id int not null primary key,name varchar(50),addr varchar(255));
MariaDB [test]> insert into company values(1,"alibaba","china");
MariaDB [test]> select * from company;

# mysql2 查看数据库列表。找到test数据库,查询表 验证从数据库的复制
[root@mysql2 ~]# mysql -uroot -p000000
MariaDB [(none)]> use test;
MariaDB [test]> show tables;
MariaDB [test]> select * from company;

### 读写分离
# 安装客户端工具
[root@mycat ~]# yum install -y MariaDB-client
# 使用mysql命令查看Mycat服务的逻辑库USERDB
[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p000000
MySQL [(none)]> show databases;
MySQL [(none)]> use USERDB
MySQL [USERDB]> show tables;
MySQL [USERDB]> select * from company;
# 使用mysql命令对表company添加一条数据
MySQL [USERDB]> insert into company values(2,"bastetball","usa");
MySQL [USERDB]> select * from company;

# 验证Mycat服务对数据库读写操作分离
[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show  @@datasource;'
0

评论

博主关闭了当前页面的评论