192.168.1.11 master
192.168.1.12 slave
在此配置两台服务器
master应用: mysql数据库主库 | mycat | mycat-web | zookeeper
slave 应用 : mysql数据库从库
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
192.168.1.11上执行
hostnamectl set-hostname master
192.168.1.12上执行
hostnamectl set-hostname slave
以下同时在master和slave上执行
1、下载mysql5.7.24
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-boost-5.7.24.tar.gz
2、安装依赖包
yum install gcc gcc-c++ cmake ncurses-devel bison-devel ncurses-devel perl zlib-devel autoconf automake libxml-devel libmcrypt
3、源码包编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=boost \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3308
PREFIX:安装目录
DATADIR:数据目录
SYSCONFDIR:配置文件目录
UNIX_ADDR:指定sock位置
DEFAULT_CHARSET:默认字符集
DEFAULT_COLLATION:默认编码
EXTRA_CHARSETS:额外编码
TCP_PORT:端口
其他是安装一些数据库引擎
4、编译安装
make && make install
5、添加mysql用户和组
groupadd mysql && useradd -g mysql mysql
6、配置数据库存储目录及权限
mkdir /data/mysql && chown -R mysql. /usr/local/mysql && chown -R mysql. /data/mysql
7、配置mysql主配置文件
vim /etc/my.cnf
[client]
port = 3308
socket=/data/mysql/mysql.sock
[mysqld]
user = mysql
port = 3308
datadir=/data/mysql
socket=/data/mysql/mysql.sock
pid-file=/data/mysql/mysqld.pid
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
pid-file=/data/mysql/mysqld.pid
log-error = /data/mysql/mysqld.log
log-bin=tanrui-bin
server-id=111 #注意这个地方每台服务器要不同
binlog-ignore-db=information_schema #二进制日志忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=mycatweb
log-slave-updates
slave-net-timeout=60 #从库连接超时设置
[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
8、初始化数据库(这一步要保证/etc/my.cnf存在)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
–initialize-insecure 表示初始化root用户为空密码
–initialize 表示初始化root用户为随机密码,密码在日志里面查看,在此的日志目录为/data/mysql/mysqld.log
9、配置启动服务
chown mysql.mysql /etc/my.cnf && cp /usr/local/mysql/support-files/mysql.server /etc/init.d/
10、启动测试
service mysql.server start
11、开机启动
chkconfig mysql.server on
12、也可以使用命令行启动方式,效果是相同的
nohup /usr/local/mysql/bin/mysqld --defaults-extra-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysqld.log --pid-file=/data/mysql/mysqld.pid --socket=/data/mysql/mysql.sock --port=3308 &
13、测试mysql是否运行正常及登录数据库
/usr/local/mysql/bin/mysql -S /data/mysql/mysql.sock
14、授权远程登录
grant all privileges on *.* to root@'%' identified by '123456';flush privileges;
15、配置环境变量
echo -e "PATH=$PATH:${JAVA_HOME}/bin:/usr/local/mysql/bin:/usr/local/mysql/lib\nexport PATH" >> /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
16、验证mysql -V
17、到此mysql5.7.24部署完成,主从库安装都是一样的,测试远程连接数据库操作,在此不详述了,下面开始配置主从
在master上如下操作
1、登录master库
mysql -S /data/mysql/mysql.sock
2、添加一个用户用作主从复制用
grant replication slave on *.* to 'repl'@'192.168.1.%' identified by 'repl';
3、show master status;记住File和Position字段的值,要在slave用到
在slave上如下操作
1、登录从库
mysql -S /data/mysql/mysql.sock
2、配置主从连接
change master to master_host='192.168.1.11',master_port=3308,master_user='repl',master_password='repl’,master_log_file='tanrui-bin.000006',master_log_pos=154;
3、启动主从复制
start slave;
4、验证主从:
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两个参数都为Yes即成功
如果是配置有数据的主从就需要先备份主数据库的文件,恢复到从库,再执行以上步骤。
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
wget http://dl.mycat.io/zookeeper-3.4.6.tar.gz
tar zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
tar zxvf zookeeper-3.4.6.tar.gz && mv zookeeper-3.4.6 /usr/local/zookeeper
tar zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz -C /usr/local/
准备数据:
新建3个数据库xing1、xing2、xing3,并都在数据库下面创建1张测试表做测试用
CREATE TABLE `test` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
所有表都插入两条数据,区分主从库数据内容
INSERT INTO `TRDB1`.`test` (`id`, `name`) VALUES ('1', 'xing');
INSERT INTO `TRDB1`.`test` (`id`, `name`) VALUES ('2', @@hostname)
2、配置读写分离
cd /usr/local/mycat/conf
vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="xing1" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'></schema>
<schema name="xing2" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn2'></schema>
<schema name="xing3" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn3'></schema>
<dataNode name="dn1" dataHost="db1" database="xing1" />
<dataNode name="dn2" dataHost="db1" database="xing2" />
<dataNode name="dn3" dataHost="db1" database="xing3" />
<dataHost name="db1" maxCon="1000" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostMaster1" url="192.168.1.11:3308" user="root" password="123456">
</writeHost>
<writeHost host="hostMaster2" url="192.168.1.12:3308" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
schema:逻辑库标签
--name:逻辑库名称
--checkSQLschema:是否开启namespace,开启后SQL语句可以在前面加上逻辑库的名字.表名的方式。默认关闭
--sqlMaxLimit:查询语句如未带limit则在后面加limit 参数
--dataNode:逻辑库需要访问的数据节点
dataNode:数据节点标签
--name:数据节点名称
--dataHost:对应的物理存储节点名称
--database:对应的实际物理节点上的数据库名称
dataHost:物理节点标签
--name:物理节点名称
--maxCon:最大并发连接数
--minCon:最小初始连接数
--balance:读负载均衡模式。
0:不负载均衡,读写都在第一个writehost上
1:负载均衡到除了写入那台节点的其他所有节点
2:所有节点负载均衡
3:只负载均衡到readhost,writehost不负责读操作。
--writeType:写操作切换
0:写操作发送到第一个writeHost,第一个挂了切到第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties.
1:所有写操作都随机地发送到配置的writeHost,1.5以后废弃不推荐。
--dbType:数据库类型,有mysql、oracle、MongoDB等
--dbDriver:数据库驱动连接
--switchType:切换模式
0:不自动切换
1:自动切换
2:基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
3:基于MySQLgalary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
--slaveThreshold:主从延迟毫秒数,如大于这个数则不参与负载均衡
--heartbeat:心跳检查命令
writeHost:配置物理节点的真是连接信息
--host:名称,可以自定义
--url:真是数据库的连接地址,为IP地址或者域名
--user:真是数据库的连接用户名
--password:密码
readHost:与writeHost是一样的
3、配置系统参数
vim server.xml
<!-- system标签下修改端口号 -->
<property name="serverPort">33666</property>
<property name="managerPort">33667</property>
<!-- 开启防火墙配置 -->
<firewall>
<whitehost>
<host host="192.168.1.*" user="user,user_read"/></whitehost> <!-- 配置白名单 -->
<blacklist check="false">
<property name="dropTableAllow">false</property>
</blacklist>
</firewall>
<!-- 添加用户,权限为之前在schema里面配置的host标签下user用户相同,在此可以调,但在此可以缩小不能调大 -->
<user defaultAccount="true" name="user">
<property name="password">112233</property>
<property name="schemas">xing1,xing2,xing3</property>
</user>
<!-- 添加只读用户-->
<user name="user_read">
<property name="password">112233</property>
<property name="schemas">xing1,xing2,xing3</property>
<property name="readOnly">true</property>
</user>
4、添加启动用户和授权
useradd mycat && chown -R mycat.mycat /usr/local/mycat
5、切换用户和启动
su mycat
/usr/local/mycat/bin/mycat start
6、检查日志查看有没有报错
tail -f /usr/local/mycat/logs/mycat.log
7、测试
数据节点:mysql -h 192.168.1.11 -P 33666 -uuser -p112233 -e "show databases;"
管理节点:mysql -h 192.168.1.11 -P 33667 -uuser -p112233 -e "show @@help;"
需要查看更详细日志请调整日志到DEBUG级别
vim /usr/local/mycat/conf/log4j2.xml
<asyncRoot level="info" includeLocation="true">改为<asyncRoot level="debug" includeLocation="true">
以下只在master上配置
1、添加数据目录与日志目录
cd /usr/local/zookeeper
mkdir {data,logs} && cd conf
2、配置zookeeper配置文件
cp zoo_sample.cfg zoo.cfg
echo -e "dataDir=/usr/local/zookeeper/data\ndataLogDir=/usr/local/zookeeper/logs" >> zoo.cfg
4、启动zookeeper
/usr/local/zookeeper/bin/zkServer.sh start
5、检测与配置环境变量
netstat -tunlp | grep 2181
echo -e "PATH=$PATH:/usr/local/zookeeper/bin\nexport PATH" >> /etc/profile.d/zoo.sh
source /etc/profile.d/zoo.sh
6、登录测试
zkCli.sh -server 127.0.0.1:2181
以下只在master上配置
1、创建mycatweb数据库用于存放mycat-web监控收集的数据
mysql -h 192.168.1.11 -P 3308 -uroot -p123456 -e "CREATE database mycatweb;"
2、导入初始数据结构
mysql -h 192.168.1.11 -P 3308 -uroot -p123456 mycatweb < /usr/local/mycat-web/mycat-web/WEB-INF/db/mycat-web.sql
3、添加mycat-web连接数据库的用户mycat和授权
mysql -h 192.168.1.11 -P 3308 -uroot -p123456 -e "grant all privileges on mycatweb.* to mycat@'192.168.1.%' identified by 'mycat123';flush privileges;"
4、配置mycat属性
vim /usr/local/mycat-web/mycat-web/WEB-INF/classes/mycat.properties
zookeeper=192.168.1.11:2181
sqlonline.server=192.168.1.11
sqlonline.user=mycat
sqlonline.passwd=abc123
5、配置mycat数据库连接
vim /usr/local/mycat-web/mycat-web/WEB-INF/classes/jdbc.properties
jdbc.maxActive=50
jdbc.initialSize=20
jdbc.maxWait=300000
jdbc.minIdle=20
jdbc.url=jdbc:mysql://192.168.1.11:3308/mycatweb
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=mycat
jdbc.password=mycat123
6、修改mycat端口和访问目录
vim /usr/local/mycat-web/etc/jetty.xml
<!-- 修改URI -->
<Set name="contextPath">/mycat</Set>改为<Set name="contextPath">/</Set>
<!-- 修改端口 -->
<Set name="port"><SystemProperty name="jetty.port" default="8082"/></Set> 改为<Set name="port"><SystemProperty name="jetty.port" default="8888"/></Set>
7、如果有需要可修改mycat-web jmx远程端口号
vim /usr/local/mycat-web/start.sh
-Dcom.sun.management.jmxremote.port=8999 ## 改为你想要的端口,在下面添加VM管理的时候要用到,在此我不修改。##
8、后台启动
cd /usr/local/mycat-web/ && start.sh &
9、测试,浏览器打开http://192.168.1.11:8888
10、添加监控参数
1)服务管理-新增
xing2和xing3库一样的添加
用户名:在前面mycat配置server.xml配置的用户
密码:在前面mycat配置server.xml配置的用户密码
2)VM管理-新增
端口:上面start.sh里面你修改的端口,默认8999
用户名:在mycat-web里面配置mycat.properties的用户
密码:在mycat-web里面配置mycat.properties用户的密码
有很多图片报表和曲线统计等,观赏性较强。如下示例