搭建MySQL集群一主一从 1.修改master的配置文件/etc/my.cnf 1 2 3 4 5 6 7 8 9 10 11 server-id=1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-do-db=需要复制的主数据库名字 binlog_format=STATEMENT
2.重启服务 3.在主服务上授权slave 1 2 3 4 5 6 GRANT REPLICATION SLAVE ON *.* TO 'slave' @'%' IDENTIFIED BY '授权密码,下面用到' ; CREATE USER 'slave' @'%' IDENTIFIED WITH mysql_native_password BY '授权密码,下面用到' ; GRANT REPLICATION SLAVE ON *.* TO 'slave' @'%' ;
4.查询master状态(记下File与Position值,主机不再操作)
5.修改slave的配置文件 1 2 3 4 server-id=2 relay-log=mysql-relay
6.重启从机mysql 7.从机执行复制主机命令 1 2 3 4 5 CHANGE MASTER TO MASTER_HOST='主机的IP地址' , MASTER_USER='slave' , MASTER_PASSWORD='密码' , MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001' ,MASTER_LOG_POS=653;(pisition的值)
8.启动从服务器复制功能 1 2 3 4 stop slave; start slave;
9.查看从服务器状态
10.测试是否同步 注:数据库必须是主配置文件中binlog-do-db配置的数据库才会同步
搭建双主双从 主机master1配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server-id=1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-do-db=需要复制的主数据库名字 binlog_format=STATEMENT log-slave-updates auto-increment-increment=2 auto-increment-offset=1
主机master2配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 server-id=3 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-do-db=需要复制的主数据库名字 binlog_format=STATEMENT log-slave-updates auto-increment-increment=2 auto-increment-offset=2
slave1配置 1 2 3 4 server-id=2 relay-log=mysql-relay
slave2配置 1 2 3 4 server-id=4 relay-log=mysql-relay
接下来操作与上面一主一从差不多,就是两个master也要互相复制对方 Mycat配置 !注:Mycat1.6连接mysql8时需修改mysql的加密策略
1 2 3 4 5 6 -- 修改密码为用不过期 ALTER USER 'root' @'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; -- 修改密码并指定加密规则为mysql_native_password ALTER USER 'root' @'%' IDENTIFIED WITH mysql_native_password BY '123456' ; -- 刷新权限 flush privileges;
配置文件 schema.xml:定义逻辑库,表、分片节点等内容。
rule.xml:定义分片相关规则。
server.xml:定义用户以及系统相关变量,如端口等。
schema.xml写MySQL连接信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <?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> <!--database为mysql的数据库名 --> <dataNode name="dn1" dataHost="host1" database="testMycat" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100" > <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="主机1IP:端口" user="账号" password="密码" > <!-- can have multi read hosts --> <readHost host="hostS2" url="从机1IP:端口" user="账号" password="密码" /> </writeHost> <writeHost host="hostS1" url="主机2IP:端口" user="账号" password="密码" > <readHost host="hostS3" url="从机2IP:端口" user="账号" password="密码" /> </writeHost> </dataHost> </mycat:schema>
server.xml里添加Mycat登陆用户信息 1 2 3 4 <user name="my用户名" > <property name="mycat密码" >密码</property> <property name="schemas" >TESTDB</property> </user>
在bin,目录下启动Mycat ./mycat console : 控制台运行
./mycat start : 后台运行
(图中可知,Mycat是用Java写的)
连接 1 2 3 4 mysql -u[上面server配置的用户名] -p[密码] -P [端口] -h[ip]
创建表并测试 1 2 3 create table user(id int, name varchar(11),address varchar(11)); insert into user values(1,'张三' ,@@hostname);
数据分片 垂直拆分(分库分表) 指按照业务将表进行分类,分布到不同的数据库上面,有紧密关联关系的表应该在一个库里,相互没有关联关系的表可以分到不同的库里。将数据或者说压力分担到不同的库上面。(不同库中表不同)
水平拆分(分表) 按照某个字段的某种规则来分散到多个库之中,不同库的表中包含一部分数据。(不同库拥有相同表)
主从数据同步原理 学习链接
学习链接2
END