一、搭建 MySQL 双主一从架构
1、环境准备
1.1:准备 3 台服务器进行搭建
主机 版本 IP 地址 关系
MySQL-M1 MySQL5.7 192.168.66.37 M1-S1 主从
MySQL-S1 MySQL5.7 192.168.66.39 M1-S1 主从
MySQL-M2 MySQL5.7 192.168.66.38 M1-M2 互为主从
1.2:系统环境配置
-
3 台服务器进行以下操作
-
配置本地 yum 源
在内网环境下由于无法连接到互联网所有无法直接使用互联网 yum 源
1、本地源
① 拷贝镜像到服务器/tmp 目录下
② 创建挂载目录/mnt/yum-iso,修改/etc/fstab 文件
[root@yum-server ~]# mkdir /mnt/yum-iso
[root@yum-server ~]# vim /etc/fstab
[root@yum-server ~]# mount -a
mount: /dev/loop0 写保护,将以只读方式挂载
③ 创建 yum 源配置文件并进行配置
[root@yum-server ~]# cd /etc/yum.repos.d/
[root@yum-server yum.repos.d]# vim yum-iso.repo
[yum-iso]
name=yum-iso-local
baseurl=file:///mnt/yum-iso/
gpgcheck=0
enable=1
④ 备份其他默认源使其不进行使用
[root@yum-server yum.repos.d]# mkdir bak
[root@yum-server yum.repos.d]# mv CentOS-* bak/
⑤ 检查本地源是否正常
[root@yum-server ~]# yum repolist
2、网络源
① 通过 ftp 服务让其他客户端可以进行访问
[root@yum-server ~]# yum -y install vsftpd*
[root@yum-server ~]# systemctl enable vsftpd
[root@yum-server ~]# systemctl start vsftpd
[root@yum-server ~]# systemctl status vsftpd
② 将挂载本地源存储目录拷贝至/var/ftp/pub 目录下
③ 通过浏览器访问
ftp://192.168.66.52
3、通过 reposync 命令将互联网源的包下载到本地
- 注意:需要能连接互联网
- 安装 reposync 命令,该命令包含在 yum-utils 包中
[root@yum-server ~]# yum install yum-utils
[root@yum-server ~]# reposync -r base -p /var/ftp/pub/
base为仓库标识 -p指定将下载的rpm包存储在本地的路径
# 局域网中的客户端配置本地yum源并指定访问路径为局域网yum服务器
[root@yum-server ~]# vim /etc/yum.repos.d/yum-c7.repo
[yum-c7]
name=yum-c7
baseurl=ftp://yum源服务器地址/
enable=1
gpgcache=0
- 安装常用工具已经依赖包
[root@localhost ~]# yum install vim wget lrzsz net-tools httpd-tools make gcc-c++ cmake bison-devel ncurses-devel
- 配置 hosts
192.168.66.36 MyCAT
192.168.66.37 MySQL-M1
192.168.66.38 MySQL-M2
192.168.66.39 MySQL-S1
- 关闭防火墙
~]# systemctl stop firewalld
~]# systemctl disable firewalld
~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 时间同步
~]# yum -y install ntp
~]# ntpdate 0.asia.pool.ntp.org //内网环境需要与内网中时间服务器进行同步
~]# hwclock -w //将时间同步到硬件时间
1.3:上传源码包
- 创建一个存储源码包的目录,3 台数据库服务器都需要上传
[root@localhost ~]# mkdir /soft
[root@localhost soft]# ls
mysql-5.7.26.tar.gz
2、编译安装 MySQL
- 三台 MySQL 服务器都需要执行以下的步骤
2.1:解压源码包
[root@localhost soft]# tar -zxvf mysql-5.7.26.tar.gz
2.2:安装依赖
- 建议先卸载自带的 mariadb
[root@localhost ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@localhost ~]#rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps
警告:/etc/my.cnf 已另存为 /etc/my.cnf.rpmsave #my.cnf另存为/etc/my.cnf.rpmsave
注 1:MySQL 从 5.5 开始,源代码安装将原来的 configure 改为 cmake,因此在安装 MySQL5.5.x 以上版本时,需要先安装 cmake,通过 yum 安装
注 2:MySQL5.7.5 以上版本源码安装必须要 BOOST 库,不然编译会出现如下图提示:且版本必须为 1.59 的
- 安装 cmake,如果上面环境准备中已经安装了 cmake 则不需要执行下面 cmake 的安装
[root@localhost ~]# yum -y install cmake
- 安装 boost 库
1、创建boost库目录,上传boost包,然后安装
Boost库网站https://sourceforge.net/projects/boost/files/boost/
[root@localhost ~]# mkdir /usr/local/boost
2、下载并解压,无法连接外网情况下需要下载至本地然后拷贝至服务器
[root@localhost ~]# cd /usr/local/boost/
[root@localhost boost]# wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
3、将boost解压出来即可
[root@localhost boost]# tar -zxvf boost_1_59_0.tar.gz
2.3:编译
- 创建安装目录与数据存储目录
[root@localhost ~]# mkdir -p /usr/local/mysql/data
[root@localhost ~]# mkdir /usr/local/mysql/logs #日志存储
- 进入 mysql 解压目录进行编译
[root@localhost ~]# cd /soft/mysql-5.7.26
[root@localhost mysql-5.7.26]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EMBEDDED_SERVER=1
- 参数解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql # mysql 安装路径
-DMYSQL_DATADIR=/usr/local/mysql/data # mysql 数据存储路径
-DWITH_BOOST=/usr/local/boost # 使用本地 boost 库
-DENABLED_LOCAL_INFILE=1 # 允许从本文件导入数据
-DDEFAULT_CHARSET=utf8 \ # 指定字符集
-DDEFAULT_COLLATION=utf8_general_ci \
- 注:如果编译失败,需要删除 MySQL 源码包解压路径下的 CMakeCache.txt 文件,然后再次进行编译
2.4:安装
[root@localhost mysql-5.7.26]# make && make install
- 安装完成
[root@localhost mysql-5.7.26]# make clean
2.5:创建用户并进行授权
- 创建 mysql 用户
[root@mysql-m1 ~]# groupadd mysql
[root@mysql-m1 ~]# useradd -s /sbin/nologin -g mysql -M -r mysql
[root@mysql-m1 ~]# chown -R mysql. /usr/local/mysql/
2.6:实例初始化
三台数据库都需要进行初始化
-
注意
5.7.6 之前初始化的方法是:bin/mysql_install_db
5.7.6 之后的版本初始化数据库不再使用 mysql_install_db,而是使用: bin/mysqld –initialize -
初始化完成后会生成一个随机密码用来登入数据库
[root@mysql-m1 ~]# cd /usr/local/mysql/
[root@mysql-m1 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
相关警告信息如下:
[警告]不推荐使用具有隐式 DEFAULT 值的 TIMESTAMP。 请使用--explicit_defaults_for_timestamp 服务器选项(有关详细信息,请参阅文档)。
[警告] InnoDB:创建新的日志文件,LSN = 45790
[警告] InnoDB:创建外键约束系统表。
[警告]未找到现有的 UUID,因此我们假设这是第一次启动此服务器。 生成新的 UUID:4c52a0d9-9b00-11e9-a75a-000c29dc5ef4。
[警告] Gtid 表尚未准备好使用。 表'mysql.gtid_executed'无法打开。
[注意]为 root @ localhost 生成临时密码:u-jUegVt.1G<
2.7:配置环境变量
[root@mysql-m1 mysql]# vim /etc/profile
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local /mysql/bin
[root@mysql-m1 mysql]# source /etc/profile
2.8:配置 system 管理服务
[root@mysql-m1 ~]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
User=mysql
Group=mysql
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld_safe
# Give up if ping don't get an answer
TimeoutSec=600
Restart=always
PrivateTmp=false
- 注意:ExecStart= 后面跟的是 MySQL 启动程序的安装路径,根据实际情况配置路径
mysqld_safe 脚本会在启动 MySQL 服务器后继续监控其运行情况,并在其死机时重新启动它。
3、搭建主从
搭建思路
- 系统时间需要同步
- 关闭防火墙和 selinux
- hosts 文件中两台服务器主机名和 ip 地址一一对应起来
- master 和 slave 的数据库版本保持一致
- master 端必须开启二进制日志;slave 端必须开启 relaylog 日
- master 端和 slave 端的 server_id 号必须不能一致
- 告诉 slave 需要同步的 master 主机的 IP、user、password 等..
3.1:修改 my.cnf 文件
- 由于上面将系统自带的 mariadb 卸载时,系统默认将/etc/my.cnf 另存为/etc/my.cnf.rpmsave,所有需需要复制一份出来
[root@mysql-m1 ~]# cp /etc/my.cnf.rpmsave /etc/my.cnf
-
M1-M2 互为主从,M1-S1 为主从
-
MySQL-M1 配置如下:
[root@mysql-m1 ~]# vim /etc/my.cnf
-
MySQL-M2 配置如下:
-
MySQL-S1 配置如下
3.2:数据同步
数据同步以当前数据库中存放最新数据的数据库为主
不初始化数据有可能 slave 端的 Slave_SQL_Running:显示为 NO
[root@mysql-m1 ~]# rsync -av /usr/local/mysql/data root@192.168.66.38:/usr/local/mysql/
[root@mysql-m1 ~]# rsync -av /usr/local/mysql/data root@192.168.66.39:/usr/local/mysql/
-
注意:拷贝的是 data 整个目录,data 后面千万不要加/,不然拷贝过去的就是 data 目录下的文件
slave 端需要删除数据(data)目录下的 auto.cnf 文件 -
M1 数据库
[root@mysql-m1 ~]# cd /usr/local/mysql/data/
[root@mysql-m1 data]# ls
auto.cnf ibdata1 ib_logfile1 mysql-m1.err sys
ib_buffer_pool ib_logfile0 mysql performance_schema
[root@mysql-m1 data]# rm -f auto.cnf
- M2 数据库:
[root@MySQL-M2 ~]# cd /usr/local/mysql/data/
[root@MySQL-M2 data]# rm -f auto.cnf
- S1 数据库:
[root@MySQL-S1 ~]# cd /usr/local/mysql/data/
[root@MySQL-S1 data]# rm -f auto.cnf
3.3:启动数据库
- 三台服务器都进行启动
[root@mysql-m1 ~]# systemctl enable mysqld
[root@mysql-m1 ~]# systemctl start mysqld
[root@mysql-m1 ~]# systemctl status mysqld
启动报错:
mysqld_safe: my_print_defaults: Can't read dir of '/etc/my.cnf.d' (Errcode: 2 - No such file or directory)
原因:
mysqld_safe 脚本进行启动时没有找到/etc/my.cnf.d 目录;默认系统中是存在的
解决方案:
创建/etc/my.cnf.d
[root@mysql-m1 ~]# mkdir /etc/my.cnf.d
再次启动数据库
[root@mysql-m1 ~]# systemctl start mysqld
3.4:登入数据库
- 三台数据登入后修改密码
[root@mysql-m1 ~]# mysql -uroot -p
Enter password: #输入初始化时生成的随机密码
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 解决方案:
设置软链接
[root@mysql-m1 ~]# ln -s /usr/local/mysql/mysql.sock /tmp/
- 如果随机密码不记得可以通过以下方式进行登入
[root@8-mysql-m1 ~]# vim /etc/my.cnf
在[mysqld]段下添加skip-grant-tables参数,重置密码后将该参数去除
- 重启数据库
[root@8-mysql-m1 ~]# systemctl restart mysqld
[root@8-mysql-m1 ~]# mysql #直接输入mysql即可登入
- 重置密码
mysql> update mysql.user set authentication_string=PASSWORD('123456') where User='root';
[root@mysql-m1 ~]# vim /etc/my.cnf
- 重启数据库
[root@mysql-m1 ~]# systemctl restart mysqld
[root@mysql-m1 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@mysql-m1 ~]# mysql -uroot -p #输入密码登录
【问题】
通过密码登入执行任何语句都报如下错误
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
【解决方法】
mysql> SET PASSWORD = PASSWORD('你的新密码');
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
mysql> flush privileges;
【问题解决】
3.5:Master 创建复制授权账户
3.5.1:M1 和 M2 上都需要创建授权账户
- Master1:
mysql> grant replication slave on *.* to 'slave'@'192.168.66.%' identified by '123456';
- Master2:
mysql> grant replication slave on *.* to 'slave'@'192.168.66.%' identified by '123456';
3.5.2:查看 Master 中 binlog 文件名和 pos 点位
- ① Master1
1、添加只读锁
mysql> flush tables with read lock; 先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了
mysql> create database t;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
2、查看binlog信息
mysql> show master status;
- ② M2 和 S1 同步 M1 信息
Master2 和 Slave1 上配置复制信息
mysql> change master to master_host='192.168.66.37',master_user='slave',master_password='123456',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=449;
mysql> change master to
-> master_host='192.168.66.37', master ip
-> master_user='slave', 同步用户
-> master_password='123456', 密码
-> master_port=3306, 端口
-> master_log_file='mybinlog.000004', master上查到到二进制日志名
-> master_log_pos=449; master上面查到的位置号
- ③ Master2
1、添加只读锁
mysql> flush tables with read lock; 先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了
mysql> create database t;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
2、查看binlog信息
mysql> show master status;
- ④ M1 同步 M2 的信息
mysql> change master to master_host='192.168.66.38',master_user='slave',master_passwordd='123456',master_port=3306,master_log_file='mysql-bin.000005',master_log_pos=449;
- ⑤ M1\M2\S1 启动复制线程
mysql> start slave;
mysql> show slave status \G; //以下2项全部为Yes可正常使用
Slave_IO_Running: Yes 代表成功连接到master并且下载日志
Slave_SQL_Running: Yes 代表成功执行日志中的SQL语句
- ⑥ M1\M2 端解锁
mysql> unlock tables; 解锁
- ⑦ 测试验证
M1 写数据,M2/S1 上可以看到
M2 写数据,M1 上可以看到
S1 上写数据,M1/M2 上无法看到
- 测试 1:M1 上创建一个库
mysql> create database yptms; ##创建了一个yptms的数据库
Query OK, 1 row affected (0.00 sec)
-
M2 和 S1 上进行查看
-
测试 2:M2 上创建一个数据库
mysql> create database test; ##创建了一个test数据库
Query OK, 1 row affected (0.01 sec)
-
M1/S1 上查看数据库
-
测试 3:S1 上创建一个数据库
mysql> create database web;
Query OK, 1 row affected (0.00 sec)
- M1/M2 上查看数据库
二、安装 MyCAT 实现读写分离
- 注意:由于 MyCAT 是由 JAVA 开发的,所以在使用 MyCAT 时需要安装 JDK
1、安装配置 JDK 环境
1.1:下载 JDK
Java SE - Downloads | Oracle Technology Network | Oracle
-
选择所需版本进行下载
-
选择 Linux 平台的源码包
1.2:解压安装
- 上传 jdk 包至服务器/soft 目录中,可通过 ftp 的方式进行上传
[root@mycat ~]# mkdir /soft
[root@mycat ~]# cd /soft
[root@mycat soft]# ls
jdk-12.0.1_linux-x64_bin.tar.gz
[root@mycat soft]# tar -zxvf jdk-12.0.1_linux-x64_bin.tar.gz -C /usr/local/
1.3:配置 jdk 环境
[root@mycat soft]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk-12.0.1
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:/usr/local/mycat/bin
export JAVA_HOME JAVA_BIN PATH CALSSPATH MYCAT_HOME
[root@mycat soft]# source /etc/profile
[root@mycat soft]# java -version #检查是否安装成功
java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
2、安装 MyCAT
2.1:下载 MyCAT
官网:http://www.mycat.io/
软件下载地址:http://dl.mycat.io/
-
点击下载
-
跳转至 MyCAT GitHub 界面 http://dl.mycat.io/
-
选择版本,此处选择 1.6 版本
-
选择 Linux 版本下载
2.2:解压安装
- 上传软件包至服务器/soft 目录下,并解压至/usr/local 目录下
- 注意:mycat 无需进行三部曲,直接解压到指定目录即可完成安装
[root@mycat soft]# tar -zxvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/
[root@mycat soft]# cd /usr/local/mycat/
- 目录结构
[root@mycat mycat]# ls
3、后端数据库创建授权用户
3.1:Master 数据库创建全权限用户
- 在 Master1 上创建即可
mysql> create user root@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL ON solo.* TO root@'%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
3.2:Slave 数据库创建只读权限用户
mysql> CREATE USER readonly@'%' IDENTIFIED BY '123456';
mysql> GRANT SELECT ON solo.* TO readonly@'%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
4:配置文件修改
[root@mycat ~]# cd /usr/local/mycat/conf/
配置文件说明:
server.xml 默认可不用修改,此文件是配置中间件登入时用到的用户名和密码,对应映射虚拟库的名称
schema.xml 配置中间件真实数据库的数据库用户名、数据库登入密码、IP、端口
4.1:配置文件 schema.xml
[root@mycat conf]# vim schema.xml
拷贝一份默认配置然后再进行修改
[root@mycat conf]# cp schema.xml{,.bak}
[root@mycat conf]# vim schema.xml
- 注意上面的 datanode 对应下面的 datanode name,所以如果不对应则 mycat 无法启动
4.2:配置文件 server.xml
[root@mycat conf]# vim server.xml
4.3:主要参数说明
balance 指的负载均衡类型,目前的取值有 4 种:
- balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
- balance=”1”,全部的 readHost 与 stand bywriteHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
- balance=”2”,所有读操作都随机的在 writeHost、readhost 上分发。
- balance=”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
注意:balance=3 只在 1.4 及其以后版本有,1.3 没有。
writeType 属性:
- writeType=”0”,所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties.
- writeType=”1”,所有写操作都随机地发送到配置的 writeHost,1.5 以后废弃不推荐。
switchType 指的是切换的模式,目前的取值也有 4 种
- switchType=’-1’ 表示不自动切换
- switchType=’1’ 默认值,表示自动切换
- switchType=’2’ 基于 MySQL 主从同步的状态决定是否切换,心跳语句为 show slave status
- switchType=’3’基于 MySQLgalary cluster 的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’。
- 注意:估计 Mycat1.4 才开始支持 switchType。1.3 版本配置该属性的话,日志里会报错:org.xml.sax.SAXParseException;lineNumber: 61; columnNumber: 86; Attribute “switchType” must bedeclared for element type “dataHost”。
MyCAT 心跳检查询句配置为 show slave status ,dataHost 上定义两个新属性: switchType=”2” 与 slaveThreshold=”100”,此时意味着开启 MySQL 主从复制状态绑定的读写分离与切换机制,Mycat 心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”,”Slave_IO_Running”,”Slave_SQL_Running”三个字段来确定当前主从同步的状态及 Seconds_Behind_Master 主从复制时延,当 Seconds_Behind_Master>slaveThreshold 时,读写分离筛选器会过滤掉此 Slave 机器,防止读到很久以前的旧数据,当主节点宕机后,切换逻辑会检查 Slave 上的 Seconds_Behind_Master 是否为 0,为 0 时则表示主仅同步,可安全切换,否则不会切换。
5、启动 MyCAT
5.1:通过 system 管理服务
[root@mycat ~]# vim /etc/systemd/system/mycat.service
[Unit]
Description=mycat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/mycat/logs/mycat.pid
ExecStart=/usr/local/mycat/bin/mycat start
ExecReload=/usr/local/mycat/bin/mycat restart
ExecStop=/usr/local/mycat/bin/mycat stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
5.2:启动 MyCAT
[root@mycat ~]# systemctl daemon-reload
[root@mycat ~]# systemctl start mycat
[root@mycat ~]# systemctl status mycat
5.3:启动问题汇总
【问题 1】如果出现以下报错
FATAL | wrapper | 2019/06/30 19:12:14 | ERROR: Could not write pid file /usr/local/mycat/logs/mycat.pid: No such file or directory
【解决方案】
直接在提示的目录/usr/local/mycat/下创建 logs 目录
【问题 2】
ERROR | wrapper | 2019/06/30 19:12:14 | Unable to start JVM: No such file or directory (2)
ERROR | wrapper | 2019/06/30 19:12:14 | JVM exited while loading the application.
查看报错日志
[root@mycat ~]# cat /usr/local/mycat/logs/wrapper.log | grep ERROR
【解决方案 1】修改配置文件
[root@mycat ~]# vim /usr/local/mycat/conf/wrapper.conf
增加以下参数:
wrapper.java.command=/usr/local/jdk-12.0.1/bin/java
【解决方案 2】检查 profile 文件中 java 路径是否正确
【问题 3】
INFO | WrapperSimpleApp: Encountered an error running main: java.lang.ExceptionInInitializerError
INFO |java.lang.ExceptionInInitializerError
【原因】
以上报错提示为,数据库连接不上的问题
【解决方案】
1、 排查配置文件是否正确 server.xml,schema.xml
2、 检查 schema.xml 中配置的数据库用户密码是否正确,是否进行了访问授权
6、测试访问
- 通过 navicat 连接测试
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于