搭建MYSQL集群(主从复制,读写分离)

搭建MYSQL集群(主从复制,读写分离)

架构:

在这里插入图片描述

环境:

CentOS7.3 一台,1核2G;MYSQL 5.7.23;mycat 1.6;

实战:

1. 搭建MYSQL(master01)主库

# 创建master01目录
mkdir /data/mysql/master01 -p
cd /data/mysql/master01/
mkdir conf data 
chmod 777 -R *

# 创建配置文件
cat << EOF > conf/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=MIXED
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
EOF

# 创建容器
docker create --name mysql-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/mysql/mysql.conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.23


# 启动
docker start mysql-master01 && docker logs -f mysql-master01



# 创建同步账户并授权
create user 'ko'@'%' identified by '123';
grant replication slave on *.* to 'ko'@'%';
flush privileges;

# 查看master状态并记录下来
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 750      |              |                  |                   |



# 查看二进制日志相关配置项
show global variables like 'binlog%';

# 查看server相关配置项
show global variables like 'server%';

主数据库配置文件可以有以下可选参数:

在这里插入图片描述

2.搭建MYSQL(slave01)从库

# 创建slave01目录
mkdir /data/mysql/slave01 -p
cd /data/mysql/slave01/
mkdir conf data 
chmod 777 -R *


# 创建配置文件
cat << EOF > conf/my.cnf
[mysqld]
server-id=2
relay-log=mysql-relay
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
EOF


# 创建容器
docker create --name mysql-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/mysql/mysql.conf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.23


# 启动
docker start mysql-slave01 && docker logs -f mysql-slave01


# 设置master相关信息
CHANGE MASTER TO
	master_host='172.16.0.4',   # master01 的 ip
	master_user='ko',          # 共享用户名
	master_password='123',      # 共享密码
	master_port='3306',        # master01 的端口
	master_log_file='mysql-bin.000001'    #由master01数据库show master status;产生的File列数据
	master_log_pos=750;        #由master01数据库show master status;产生的Position列数据
	
	
# 启动从库
start slave;

# 查看slave状态
show slave status;

# 这两项为Yes时才算成功!
Slave_IO_Running              | Yes             
Slave_SQL_Running             | Yes


***************************[ 1. row ]***************************
Slave_IO_State                | Waiting for master to send event
Master_Host                   | 172.16.0.4
Master_User                   | ko
Master_Port                   | 3306
Connect_Retry                 | 60
Master_Log_File               | mysql-bin.000001
Read_Master_Log_Pos           | 750
Relay_Log_File                | bc3a7c5b57b5-relay-bin.000002
Relay_Log_Pos                 | 320
Relay_Master_Log_File         | mysql-bin.000001
Slave_IO_Running              | Yes             
Slave_SQL_Running             | Yes
Replicate_Do_DB               | 
Replicate_Ignore_DB           | 
Replicate_Do_Table            | 
Replicate_Ignore_Table        | 
Replicate_Wild_Do_Table       | 
Replicate_Wild_Ignore_Table   | 
Last_Errno                    | 0
Last_Error                    | 
Skip_Counter                  | 0
Exec_Master_Log_Pos           | 750

3.测试一下是否成功

# master01 创建数据库test01
mysql root@localhost:(none)> create database test01;                            
Query OK, 1 row affected
Time: 0.005s

# slave01 中以查询到数据库
mysql root@localhost:(none)> show databases;                                    
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test01             |
+--------------------+
5 rows in set
Time: 0.016s

# master01 创建表stu,并插入数据
mysql root@localhost:test01> create table stu(id int not null, name varchar(10) 
                             not null );                                        
Query OK, 0 rows affected
Time: 0.025s
mysql root@localhost:test01> insert into stu values(1,'a');                     
Query OK, 1 row affected
Time: 0.026s
mysql root@localhost:test01> insert into stu values(2,'b');                     
Query OK, 1 row affected
Time: 0.007s

# slave01 中以查询数据
mysql root@localhost:(none)> use test01;                                        
You are now connected to database "test01" as user "root"
Time: 0.001s
mysql root@localhost:test01> show tables;                                       
+------------------+
| Tables_in_test01 |
+------------------+
| stu              |
+------------------+
1 row in set
Time: 0.019s
mysql root@localhost:test01> select * from stu;                                 
+----+------+
| id | name |
+----+------+
| 1  | a    |
| 2  | b    |
+----+------+
2 rows in set
Time: 0.019s

4.搭建mycat

# 首先安装jdk
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

# 安装mycat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 
mv mycat /usr/local/
1)mycat schema.xml配置文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="host1" database="test01" />
  <!-- 搭建读写分离这里的balance必须改为1(双主双从),或3(单主单从) -->
	<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<!-- 心跳检测 -->
    <heartbeat>select user()</heartbeat>
		<!-- 写库 -->
		<writeHost host="hostM1" url="localhost:3306" user="root"
				   password="123456">
			<!-- 读库 -->
			<readHost host="hostS2" url="localhost:3307" user="root" password="123456" />
		</writeHost>
	</dataHost>
</mycat:schema>
2) 运行mycat
./bin/mycat console
3) 连接mycat
mycli -h localhost -umycat -P8066
# 如果没有mycli命令可以通过python3的pip3下载, 也可以用mysql自带的mysql命令来连接。
pip3 install mycli

这里的连接需要看自己的mycat配置文件里的server.xml的内容:

在这里插入图片描述

4) 测试mycat
[root@ko ~]# mycli -h localhost -umycat -P8066
Password: 
mysql 5.7.23
mycli 1.20.1
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - Daniel Black
mysql mycat@localhost:(none)> USE TESTDB;                                       
You are now connected to database "TESTDB" as user "mycat"
Time: 0.001s
mysql mycat@localhost:TESTDB> show tables;                                      
+------------------+
| Tables_in_test01 |
+------------------+
| stu              |
+------------------+
1 row in set
Time: 0.020s
mysql mycat@localhost:TESTDB> select * from stu;                                
+----+------+
| id | name |
+----+------+
| 1  | a    |
| 2  | b    |
+----+------+
2 rows in set
Time: 0.018s

经测试mycat读写分离已经搭建成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值