1. MyCat 中间件
MyCat 是一款 数据集群软件 ,支持MySQL 和常用的关系型数据库
2. mysql忘记密码
vi /etc/my.cnf#在[mysqld]下添加编码配置skip-grant-tables #无需密码进入mysqlmysql -uroot -p #直接回车进入#修改密码use mysql;update user set authentication_string=password('123456') where user='root';#刷新权限flush privileges;exit;#删除之前的无密码vi /etc/my.cnfsystemctl restart mysqld #重启
3. 安装
mysql
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-serversystemctl start mysqld.servicegrep "password" /var/log/mysqld.logmysql -uroot -p#修改密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';#关闭密码强度检测grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;flush privileges;#退出exit#防火墙firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload#配置默认编码为UTF-8 修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示vi /etc/my.cnf#在[mysqld]下添加character_set_server=utf8collation-server=utf8_general_ciinit_connect='SET NAMES utf8'systemctl restart mysqld# 开机启动systemctl enable mysqldsystemctl daemon-reload#用户名为root 密码为A37
mycat
#上传mycat到linux上tar -xvf Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz# 编辑环境变量vi /etc/profile#添加以下内容export MYCAT_HOME=/root/mycatsource /etc/profilecd /root/mycat/bin./mycat startfirewall-cmd --zone=public --add-port=8066/tcp --permanentfirewall-cmd --reload#用户root 密码123456 端口8066
4. 克隆
克隆重新生成mac地址
并修改mysql的uuid 随机改一下
vi /var/lib/mysql/auto.cnf
5. 主重复制
MyCat 的读写分离 需要用到主从复制 从表会根据主表进行同步
我们在写数据时 写入主表 而读取从从表中读取
#在主服务器上vi /etc/my.cnf#在[mysqld]加上 log-bin 开启主从复制 server-id 主从服务器的唯一标识log-bin=mysql-binserver-id=1innodb_flush_log_at_trx_commit=1sync_binlog=1service mysqld restartmysql -uroot -p# 需要 file和position的值 配置从服务器用show master status;
#在从服务器上vi /etc/my.cnf#在[mysqld]加上server-id=2mysql -uroot -puse mysql;drop table slave_master_info;drop table slave_relat_log_info;drop table slave_worker_info;drop table innodb_index_stats;drop table innodb_table_stats;sorce /usr/share/mysql/mysql_system_tables.sql;serveice mysqld restartmysql -uroot -pchange master to master_host='主服务器ip',master_port=3306,master_user='root',master_password='password',master_log_file='刚刚在主服务器查到的值',master_log_pos=同样也是之前查到的;# 开启从节点start slave;# 查询结果 Slave_IO_Runing和Slave_SQL_Running都为yes才成功show slave status\G;
6. 读写分离
需要先配置主从复制 写操作只写主服务器 而读取是从从服务器中数据
# 修改server.xmlvi /root/mycat/conf/server.xml
<user name="root" defaultAccount="true"><!-- 密码 --><property name="password">123456</property><!-- 库名 --><property name="schemas">TESTDB</property><property name="defaultSchema">TESTDB</property></user>
# 修改schema.xmlvi /root/mycat/conf/schema.xml
<!-- 建议百度找配置文件这个不太准确 --><mycat:schema xmlns:mycat="http://io.mycat/"><!-- name为主服务器 server文件的虚拟库名与name必须一致 --><schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1"><table name="customer" primaryKey="id" dataNode="dn1,dn2" rule="sharding-by-intfile" autoIncrement="true" fetchStoreNodeByJdbc="true"><childTable name="customer_addr" primaryKey="id" joinKey="customer_id" parentKey="id"> </childTable></table></schema><!-- name必须与datenode一致 database为真实的库名 --><dataNode name="dn1" dataHost="localhost1" database="db1" /><dataNode name="dn2" dataHost="localhost1" database="db2" /><dataNode name="dn3" dataHost="localhost1" database="db3" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- 主服务器 host自定义 url为写的数据的地址+端口 user passwd --><writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"password="root"><!-- 从服务器 负责读 --><readHost host="hostS1" url="从服务器+端口" user="" password=""></writeHost></dataHost></mycat:schema>
# 重启 mycat./mycat restart
使用时连接mycat的地址使用即可
7. 分库分表
将庞大数据量拆分为不同的数据库和数据表进行存储
7.1. 水平拆分
根据表的数据逻辑关系,将同一表中的数据按某种条件,拆分到多台服务器上,也叫横向拆分
修改主服务器中 server.xml vi /root/mycat/conf/server.xml
<!-- 添加property 配置主键方式 0为本地文件方式 --><property name="sequnceHandlerType">0</property>
修改主服务器的 sequence_conf.properties vi /root/mycat/conf/sequence_conf.properties
GLOBAL.HISIDS= #可以自定义关键字GLOBAL.MINID=10001 #最小值GLOBAL.MAXID=20000 #最大值
修改schema.xml vi /root/mycat/conf/schema.xml
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><table name="customer" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long"></table></schema><!-- name必须与datenode一致 database为真实的库名 --><dataNode name="dn1" dataHost="localhost1" database="db1" /><dataNode name="dn2" dataHost="localhost1" database="db2" /><dataNode name="dn3" dataHost="localhost1" database="db3" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- 主服务器 host自定义 url为写的数据的地址+端口 user passwd --><writeHost host="hostM1" url="localhost:3306" user="root"password="root"><!-- 从服务器 负责读 --><readHost host="hostS1" url="从服务器+端口" user="" password=""></writeHost></dataHost></mycat:schema>
修改 rule.xml vi /root/mycat/conf/rule.xml
<function name='mod-log' class='io.mycat.route.function.PartitionBymod'><property name='count'>3</property></function>
插入数据列名必须完整 如果是自增键 则需要用 NEXT VALUE FOR MYCATSEQ_GLOBAL 不能用null
以上配置用的是根据主键取模方式拆分
7.2. 垂直拆分
根据业务的维度,将不同的表切分到不同数据库上,也叫纵向拆分
修改schema.xml vi /root/mycat/conf/schema.xml
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></table><table name="dog" primaryKey="id" autoIncrement='true' dataNode='dn4'></table><table name="cat" primaryKey="id" autoIncrement='true' dataNode='dn5'></table></schema><!-- name必须与datenode一致 database为真实的库名 --><dataNode name="dn4" dataHost="localhost1" database="db1" /><dataNode name="dn5" dataHost="localhost1" database="db2" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- 主服务器 host自定义 url为写的数据的地址+端口 user passwd --><writeHost host="hostM1" url="localhost:3306" user="root"password="root"><!-- 从服务器 负责读 --><readHost host="hostS1" url="从服务器+端口" user="" password=""></writeHost></dataHost></mycat:schema>
根据 表名 区分库 如dog 存放在db1中 cat存放在db2中
