centos7 mysql5.8主从复制与 使用 mycat 进行读写分离
my.cnf 路径在 /etc/my.cnf
--主机 my.cnf 设置
server_id=128 ###服务器id
log-bin=mysql-bin ###日志文件
--创建用户
create user '用户'@'%' identified by '密码'
--修改密码的加密方式
alter user '用户'@'%' identified with mysql_native_password by '密码';
--赋权
GRANT REPLICATION SLAVE ON *.* to '用户'@'%' with grant option;
--查看主机ID, 与状态
show variables like 'server_id'
show master status;
--备机设置 my.cnf 设置
server_id=129 ###服务器id
log-bin=mysql-bin ###日志文件
binlog_do_db=test #同步哪些数据库
--备机sql执行
stop slave --停止同步
--设置
change master to master_host='主机IP',
master_user='用户',
master_password='密码',
master_log_file='主机日志版本',master_log_pos=position; //这里的日志, position 是show master status;显示的参数
--启动同步
start slave
--查看是否成功
SHOW SLAVE STATUS
-slave_IO_state Waiting for master to send event
--slave_io_running yes 必须为yes
--slave_sql_running yes 必须为yes
测试主从复制:
在主库建立test数据库, 如果从库同步了就代表成功了。
mycat官网地址: https://github.com/MyCATApache/Mycat-Server/wiki/2.0-Mycat%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8
mycat官网地址配置说明: https://github.com/MyCATApache/Mycat-Server
mycat 下载地址: http://dl.mycat.io/1.6.6.1/ 建议下载1.6及以上的版本, 下载后上传至 liunx, tar -zvxf xxx解压
第一步: server.xml 添加读写用户, 将系统默认的修改后增加 或者直接修改都可以。
<!-- 添加 主 user -->
<user name="mycat_master">
<property name="password">mycat_master</property>
<property name="schemas">mycat</property>
</user>
<!-- 添加 读 user -->
<user name="mycat_read">
<property name="password">mycat_read</property>
<property name="schemas">mycat</property>
<property name="readOnly">true</property>
</user>
第二步: schame.xml 添加 逻辑库配置, 分片定义配置
<!-- 与server.xml中user的schemas名一致 -->
<schema name="mycat" checkSQLschema="true" sqlMaxLimit="100"> name 逻辑库名称
<table name="user" primaryKey="id" dataNode="dn1" rule="rule1"/> 表名, rule 分片规则
</schema>
<dataNode name="dn1" dataHost="jdbchost" database="test" /> // database 物理库名称
<dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostMaster" url="172.27.185.1:3306" user="root" password="root"> //主库地址
</writeHost>
<writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/> //读库地址
</dataHost>
第三步: mysql 是5.8 的话, 需要将 mycat/lib下 的 mysql 连接数据库包 改为8.0的, 这个jar包的问题困扰了我两天才想起来, 不然死活会连不上。
配置完毕:
cd /mycat/bin startup_nowrap.sh 启动
cd /mycat/logs/ console.log 出现下图, 则启动成功。
mycat/logs mycat.log 出现下图 则 连接成功。
配置完毕: 测试一下
navicat 连接: mycat默认端口8066, 防火墙需要关闭或者放开端口。
ip:8066 mycat_master/mycat_master 插入数据, 看看主库和从库是否数据同步了。
ip:8066 mycat_read/mycat_read插入数据, 会报 readonly, 至此配置完成。
当 schema.xml 中有多个 schema 逻辑数据库时, server.xml 用户配置的逻辑数据库也要加上。