@qjx378
2020-04-24T01:25:50.000000Z
字数 33482
阅读 1039
Linux
EPEL即Extra Packages for Enterprise Linux,是基于Fedora的一个项目,为红帽系
的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。EPEL为CentOS提供了额外的10000多个软件包,而且都不会更新或者替换系统本身组件。执行下面这条安装命令后,会在/etc/yum.repos.d
目录下生成一个epel.repo文件。
yum -y install epel-release
yum-axelget是EPEL提供的一个yum插件。默认的yum是单线程下载的,使用该插件后用yum安装软件时可以并行下载。yum-axelget插件原理是调用系统中的axel下载软件,然后根据软件包的大小自动设定线程数。在多线程操作时,还能避免因为线程数过多而导致服务器拒绝下载的问题,大大提高了软件的下载速度,减少了下载的等待时间。注意:通过下面这条安装命令,会同时安装axel下载软件。
yum -y install yum-axelget
yum -y install wget gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel vim ntsysv openssl-devel
在安装完EPEL源和yum-axelget插件后,我们就可以利用它们升级当前的CentOS7到CentOS7.6了(耗时大概10分钟)。
yum clean all && yum makecache && yum -y update
hostnamectl set-hostname test-tomcat1
echo -e "\nalias vi=vim\nalias grep='grep --color'\n" >>~/.bashrc && source ~/.bashrc
下面这条vim配置命令是我经常使用的,包括行号、自动缩进、高亮、文件编码和粘贴时不变形的快捷键F9等等,直接使用root用户执行即可。
echo -e "\n\nset nobomb
set number
set showmode
set autoindent
set smartindent
set showmatch
set tabstop=4
set softtabstop=4
set shiftwidth=4
set encoding=utf-8
set fileencodings=cp936,gb18030,gbk,gb2312,utf-8,ucs-bom,latin-1
set hlsearch
set noignorecase
set fileformats=unix
set pastetoggle=<F9>\n" >> /etc/vimrc
wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz
tar zxvf openssl-1.1.1f.tar.gz && cd openssl-1.1.1f
./config shared zlib --prefix=/usr/local/openssl --openssldir=/usr/local/openssl/ssl
make && make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
ldconfig
openssl version -a
这里我们直接使用Linux命令生成公私钥,方法更为简单快捷。将生成的私钥zeroteam20160815保存到本地供xShell等工具使用即可(记得删除服务器上的私钥哦)。
#######创建公钥存放目录:~/.ssh
[root@localhost ~]# mkdir .ssh && cd .ssh
#######生成1024字节的rsa加密的公私钥
[root@localhost .ssh]# ssh-keygen -b 1024 -t rsa -f zeroteam20160815
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in zeroteam20160815. [私钥]
Your public key has been saved in zeroteam20160815.pub. [公钥]
The key fingerprint is:
59:54:31:5f:37:d5:9a:c3:32:65:7d:fd:05:f3:20:38 root@localhost
The keys randomart image is:
+--[ RSA 1024]----+
| .o=.++B|
| .E +o=O|
| .. +.o=|
| o o = .|
| S o . |
| |
| |
| |
| |
+-----------------+
[root@localhost .ssh]# ls
zeroteam20160815 zeroteam20160815.pub
#######将公钥文件重命名为authorized_keys文件
[root@localhost .ssh]# mv ~/zeroteam20160815.pub authorized_keys
#######将私钥文件下载到Windows主机后,马上删除避免被恶意使用
[root@localhost .ssh]# rm -rf zeroteam20160815
新建一个shell文件sshdconfig.sh
,并执行chmod +x sshdconfig.sh
赋予执行权限,然后复制以下内容到文件中,最后执行命令./sshdconfig.sh
即可使sshd服务生效。
#!/bin/bash
# sshd service configure script
# @author vfhky 2015.05.05 https://typecodes.com/linux/centos7afteroperate.html
# set the sshd login port you want which should be more than 1024
sed -i -e "s@^#Port 22@Port 8866@g" -e "s@^#Protocol 2@Protocol 2@g" /etc/ssh/sshd_config
# set the secret key bits
sed -i -e "s@^#ServerKeyBits 1024@ServerKeyBits 1024@g" -e "s@^#RSAAuthentication yes@RSAAuthentication yes@g" /etc/ssh/sshd_config
# limit the login-way of user within Authentication-key
sed -i -e "s@^#PubkeyAuthentication yes@PubkeyAuthentication yes@g" -e "s@^#PermitEmptyPasswords no@PermitEmptyPasswords no@g" /etc/ssh/sshd_config
sed -i -e "s@^GSSAPIAuthentication yes@#GSSAPIAuthentication yes@g" -e "s@^GSSAPICleanupCredentials yes@#GSSAPICleanupCredentials yes@g" /etc/ssh/sshd_config
# forbid login with password
sed -i -e "s@^PasswordAuthentication yes@PasswordAuthentication no@g" -e "s@^PermitRootLogin yes@PermitRootLogin without-password@g" /etc/ssh/sshd_config
# start the sshd service
systemctl restart sshd.service
service sshd start
cat /etc/redhat-release
根据Linux发行版本(CentOS、Fedora都属于红帽系),从mysql官方(http://dev.mysql.com/downloads/repo/yum/
)获取Yum Repository。
wget https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
安装完MySQL的Yum Repository,每次执行yum update都会检查MySQL是否更新。
yum -y install mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld.service
然后使用命令systemctl status mysqld.service
查看MySQL数据库启动后的服务状态
使用YUM安装并启动MySQL服务后,MySQL进程会自动在进程日志中打印root用户的初始密码:
grep "password" /var/log/mysqld.log
使用小节6中获取的root用户的初始密码,然后进行修改
mysql -uroot -p
出现Enter password: 输入默认的root密码后回车
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
至此,使用在CentOS7中使用YUM方法安装MySQL5.7.x数据库完毕。可以使用新的root密码登陆MySQL了
切换到mysql数据库
use mysql;
修改host为%
update user set host='%' where user='root' and host='localhost';
刷新权限
flush privileges;
MySQL的配置文件依然是/etc/my.cnf
,其它安装信息可以通过mysql_config
命令查看。其中,动态库文件存放在/usr/lib64/mysql
目录下。
因为小节3中安装了MySQL的Yum Repository,所以以后每次执行yum操作时,都会去检查更新。如果想要去掉这种自动检查操作的话,可以使用如下命令卸载MySQL的Repository即可
yum -y remove mysql80-community-release-el7-3.noarch.rpm
主要记录在Linux系统中如何使用shell脚本备份服务器上的mysql数据库。
下面是MySql数据库的shell备份脚本,其中参数DBLIST
表示要备份的mysql数据库名称(多个空格隔开)、NUMDAYS
表示保留多少天以内的备份文件、MyUSER
和MyPASS
表示mysql数据库的用户名和密码。最终,每次执行这个脚本生成的备份文件名类似于系统日期时间_数据库.sql.gz
,例如2016072614_taxtao.sql.gz。
使用时通过chmod +x mysql_backup.sh
命令添加执行权限,然后可以利用Linux系统的crontab定时任务工具执行该脚本。例如下面这个配置就是每天凌晨1点的时候执行该shell脚本,生成mysql数据库的备份文件。
crontab -e
0 1 * * * /mydata/shell/mysql_backup.sh
#!/bin/bash
# MySQL Backup Script v1.0.0
# Space separated list of databases
DBLIST="your mysql database name witch you want to backup"
# Backup to this directory
BACKUPDIR=/mydata/backups/mysql
# Number of days to keep
NUMDAYS=60
# Some linux command and your mysql configure
FINDCMD="find"
MYSQLCMD="mysql"
MyUSER="your mysql user name" # USERNAME
MyPASS="your mysql password" # PASSWORD
MyHOST="localhost" # Hostname
DUMPCMD="mysqldump -u$MyUSER -h $MyHOST -p$MyPASS --lock-tables --databases "
GZIPCMD="gzip"
# Backup date format,e.g 20150505201019_database
BACKUPDATE=`date +%Y%m%d%H%M%S_`
function USAGE() {
cat << EOF
usage: $0 options
This script backs up a list of MySQL databases.
OPTIONS:
-h Show this message
-a Backup all databases
-l Databases to backup (space seperated)
-n Number of days to keep backups
EOF
}
while getopts "hal:n:" opt; do
case $opt in
a)
DBLIST=""
;;
h)
USAGE
exit 1
;;
l)
DBLIST="$OPTARG"
;;
n)
NUMDAYS=$OPTARG
;;
\?)
USAGE
exit
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
function ERROR() {
echo && echo "[error] $@"
exit 1
}
function NOTICE() {
echo && echo "[notice] $@"
}
function RUNCMD() {
echo $@
eval $@
}
# Sanity checks
if [ ! -n "$DBLIST" ]; then
DBLIST=`$MYSQLCMD -N -s -e "show databases" | grep -viE '(information_schema|performance_schema|mysql|test)'`
if [ ! -n "$DBLIST" ]; then
ERROR "Invalid database list"
fi
fi
if [ ! -n "$BACKUPDIR" ]; then
ERROR "Invalid backup directory"
fi
if [[ ! $NUMDAYS =~ ^[0-9]+$ ]]; then
ERROR "Invalid number of days: $NUMDAYS"
elif [ "$NUMDAYS" -eq "0" ]; then
ERROR "Number of days must be greater than zero"
fi
# Lock down permissions
umask 077
# Create directory if needed
RUNCMD mkdir -p -v $BACKUPDIR
if [ ! -d $BACKUPDIR ]; then
ERROR "Invalid directory: $BACKUPDIR"
fi
NOTICE "Dumping MySQL databases..."
RC=0
for database in $DBLIST; do
NOTICE "Dumping $database..."
RUNCMD "$DUMPCMD $database | $GZIPCMD > $BACKUPDIR/$BACKUPDATE$database.sql.gz"
RC=$?
if [ $RC -gt 0 ]; then
continue;
fi
done
if [ $RC -gt 0 ]; then
ERROR "MySQLDump failed!"
else
NOTICE "Removing dumps older than $NUMDAYS days..."
RUNCMD "$FINDCMD $BACKUPDIR -name \"*.sql.gz\" -type f -mtime +$NUMDAYS -print0 | xargs -0 rm -fv"
NOTICE "Listing backup directory contents..."
RUNCMD ls -la $BACKUPDIR
NOTICE "MySQLDump is complete!"
fi
# exit 0
系统环境:CentOS-7.3.1611
安装方式:rpm安装
软件:jdk-8u131-linux-x64.rpm
下载地址:http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
上传新的jdk-8u131-linux-x64.rpm软件到/usr/local/执行以下操作:
rpm -ivh jdk-8u131-linux-x64.rpm
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
JDK默认安装在/usr/java中。
安装openjdk
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
执行以下操作,查看信息是否正常
java -version
正常输出以下信息:
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
vi /etc/profile
在这个文件末尾加上
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
生效命令:
source /etc/profile
cd /usr/local/src
wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.45/bin/apache-tomcat-8.0.45-windows-x64.zip
或者
cd /usr/local/src
wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.45/bin/apache-tomcat-8.0.45.tar.gz
yum install unzip -y
unzip -d /usr/local apache-tomcat-8.0.45-windows-x64.zip
或者
tar -zxvf apache-tomcat-8.0.45.tar.gz
安装
mv apache-tomcat-8.0.45/ /usr/local/tomcat1
利用下面命令使文件有执行权限并使配置生效
cd /usr/local/tomcat1/bin
chmod 777 *.sh
将tomcat加入开机自启动
echo "source /etc/profile" >>/etc/rc.d/rc.local
echo "/usr/local/tomcat1/bin/startup.sh start" >>/etc/rc.d/rc.local
这里有点要说明,rc.local先于/etc/profile执行,所以会得不到JAVA环境变量,所以在startup.sh前加入代码:source /etc/profile 这样就可以
修改rc.local文件为可执行,如下:
cd /etc/rc.d
chmod +x rc.local
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
yum -y install iptables-services
如果要修改防火墙配置,如增加防火墙端口8080
vi /etc/sysconfig/iptables
增加规则
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
service iptables save #保存防火墙配置
保存退出后
systemctl enable iptables.service #设置防火墙开机启动
systemctl start iptables.service #启动防火墙
systemctl restart iptables.service #重启防火墙使配置生效
systemctl stop iptables.service #关闭防火墙
最后重启系统使设置生效即可。
cd /usr/local/tomcat1/bin
./startup.sh
大家都听说了在Apache Tomcat6 中支持了Java语言的特性 NIO( New I/O),不管你对NIO的技术是否熟悉,但你肯定能想象的到NIO是一个好东西。的确,使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。 请注意:很抱歉,在tomcat6在默认的配置选项中是没有把NIO功能打开。所以很多正在使用Tomcat6的朋友们本以为能快活的使用上NIO。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上。
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms2048M -Xmx2048M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=128M -XX:MaxPermSize=256m"
cygwin=false
open files
的默认值查看当前系统open files
的默认值
ulimit -a
没改过是1024
文件系统最大可打开文件数:
cat /proc/sys/fs/file-max
我的机器是396399
修改文件系统最大打开文件数:
echo 396399 >/proc/sys/fs/file-max
此值只能往小的设置不能超过限制值。
在vi /etc/security/limits.conf
文件中设置最大打开文件数 添加:
* soft nofile 65535
* hard nofile 65535
最后用重启ulimit -a
再次查看,open files
的值,如果改过来,则生效。
发现 Tomcat 可以用 Apache Portable Runtime 来提供更强性能,提升Web静态页面的处理能力,不再需要专门的Web Server来处理静态页面了。apr 与 tomcat-native 提供更好的伸缩性、性能和集成到本地服务器技术。
如果没有apr技术,启动tomcat 时出现如下提示:
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:
按照官方说明需要:
APR library
OpenSSL libraries
openssl 可以用
yum install -y openssl-devel
apr还是下载*.gz来安装。
wget http://mirrors.shu.edu.cn/apache/apr/apr-1.6.5.tar.gz
tar zxvf apr-1.6.5.tar.gz
cd apr-1.6.5
./configure --prefix=/usr/local/apr
make
make install
安装apr的时候出现
./configure --prefix=/usr/local/apr
rm: cannot remove `libtoolT': No such file or directory
解决办法:
vi configure
在30126行#$RM "$cfgfile"
前面加#注释掉
在重新./configure
wget http://mirrors.shu.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
tar -zxvf apr-iconv-1.2.2.tar.gz
cd apr-iconv-1.2.2
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make && make install
wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make && make install
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.19/source/tomcat-native-1.2.19-src.tar.gz
tar zxvf tomcat-native-1.2.19-src.tar.gz
cd tomcat-native-1.2.19-src/native
./configure --with-apr=/usr/local/apr
make && make install
cd /usr/local/tomcat1/bin
vi catalina.sh
在文件的#!/bin/sh下添加如下内容:
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_LIBRARY_PATH
这样的话,我们只是把这个TOMCAT的APR添加上了,不破坏其它TOMCAT的配置信息。
启动 tomcat 后, 看日志:
bin/startup.sh
head logs/catalina.out
可以看到以下结果:
在高并发下会让性能有明显提升。安装完成后重启即可生效。如使用默认protocal就是apr,但最好把将protocol修改成org.apache.coyote.http11.Http11AprProtocol,会更加明确。
cd /usr/local/tomcat1/conf
vi server.xml
替换Connector内容如下:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
executor="tomcatThreadPool"
compression="on"
compressionMinSize="2048"
maxThreads="30000"
minSpareThreads="512"
maxSpareThreads="2048"
enableLookups="false"
redirectPort="8443"
acceptCount="35000"
debug="0"
connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
强烈推荐使用APR协议!!!不要使用NIO协议+APR库支持的行为!!!!!!!!
如果安装不上APR或者真的没有办法启用APR,那么用如下的备用方案:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
executor="tomcatThreadPool"
compression="on"
compressionMinSize="2048"
maxThreads="30000"
minSpareThreads="512"
maxSpareThreads="2048"
enableLookups="false"
redirectPort="8443"
acceptCount="35000"
debug="0"
connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
另:如果使用的是tomcat 8.5+,创建的权限默认为UMASK=“0027”
,会造成其他用户无法读取的权限,需要修改为UMASK=“0022”
;需要修改的文件为catalina.sh
;修改后重启生效。
cd /usr/local/src/
下载 pcre-8.43.tar.gz到/usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
下载zlib-1.2.11.tar.gz到/usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
下载 openssl-1.1.1d.tar.gz到/usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
下载jemalloc-5.2.1.tar.bz2到/usr/local/src
wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
下载 tengine-2.3.2.tar.gz到/usr/local/src
wget https://tengine.taobao.org/download/tengine-2.3.2.tar.gz
cd /usr/local/src/
tar -zxvf pcre-8.43.tar.gz && cd pcre-8.43
./configure --prefix=/usr/local/pcre
make && make install
cd /usr/local/src/
tar -zxvf openssl-1.1.1d.tar.gz && cd openssl-1.1.1d
./config --prefix=/usr/local/openssl
make && make install
cd /usr/local/src/
tar -zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install
cd /usr/local/src/
tar -xvf jemalloc-5.2.1.tar.bz2 && cd jemalloc-5.2.1
./configure --prefix=/usr/local/jemalloc
make && make install
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig -v
groupadd www
useradd -g www www
mkdir -p /mydata/www
chmod +w /mydata/www
chown -R www:www /mydata/www
cd /usr/local/src/
tar zvxf tengine-2.3.2.tar.gz && cd tengine-2.3.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-zlib=../zlib-1.2.11 --with-pcre=../pcre-8.43 --with-jemalloc=../jemalloc-5.2.1 --with-openssl=../openssl-1.1.1d --with-openssl-opt=enable-tls1_3 --add-module=../nginx-ct --add-module=./modules/ngx_http_proxy_connect_module --add-module=./modules/ngx_http_concat_module --add-module=./modules/ngx_http_upstream_check_module --add-module=./modules/ngx_http_upstream_consistent_hash_module --add-module=./modules/ngx_http_upstream_session_sticky_module
make && make install
vi /usr/local/nginx/conf/nginx.conf
修改前面几行为:
user www www;
worker_processes 8;
error_log logs/error.log;
pid logs/nginx.pid;
events{
use epoll;
worker_connections 65535;
}
cd /usr/local/nginx
./sbin/nginx -t
如果显示下面信息,即表示配置没问题
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
运行nginx服务
./sbin/nginx
ps au|grep nginx
如果显以类似下面的信息,即表示nginx已经启动
root 2013 0.0 0.0 103156 856 pts/0 S+ 03:22 0:00 grep nginx
输入代码检测是否支持加速
lsof -n | grep jemalloc
vi /etc/sysconfig/iptables
打开文件,增加80端口那一行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
:wq #保存退出
重启防火墙使配置生效
systemctl restart iptables.service
vi /usr/lib/systemd/system/tengine.service
增加以下内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
服务相关命令
systemctl stop tengine ##停止Tengine
systemctl start tengine ##启动Tengine
systemctl reload tengine ##重新加载Tengine
systemctl enable tengine ##设置Tengine开机启动
shutdown -r now ##立即重新启动服务器
因为MyCat
是用Java开发的,因此MyCat
运行需要安装JDK(准确来说是JRE就够了),并且需要JDK1.7
或以上版本。
访问https://github.com/MyCATApache/Mycat-download
下载最新的RELEASE
版本(目前是1.5
),下载地址:
https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.5-RELEASE/Mycat-server-1.5.1-RELEASE-20160518143538-linux.tar.gz
上传安装包Mycat-server-1.5.1-RELEASE-20160518143538-linux.tar.gz
到 MyCat服务器中,并解压并移动到/usr/local/mycat
目录
在配置MyCat
前,请确认MySQL
的主从复制安装配置已完成并正常运行。MySQL
主从数据的同步在MySQL
中配置,MyCat
不负责数据同步的问题。
在schema.xml
是MyCa
t最重要的配置文件之一,用于设置MyCat
的逻辑库、表、数据节点、在dataHost
等内容。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- 税道 -->
<schema name="taxtao" checkSQLschema="true" dataNode="dn1">
</schema>
<!-- 掌中财税 -->
<schema name="palmtax" checkSQLschema="true" dataNode="dn2">
</schema>
<!-- 公共 -->
<schema name="public_platform" checkSQLschema="true" dataNode="dn3">
</schema>
<dataNode name="dn1" dataHost="localhost0" database="taxtao" />
<dataNode name="dn2" dataHost="localhost0" database="palmtax" />
<dataNode name="dn3" dataHost="localhost0" database="public_platform" />
<dataHost name="localhost0" maxCon="1000" minCon="100" balance="3" writeType="0" dbType="mysql" dbDriver="native" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="143M1" url="192.168.1.143:3306" user="root" password="1qazXSW2!@123">
<!-- can have multi read hosts -->
<readHost host="144S1" url="192.168.1.144:3306" user="root" password="1qazXSW2!@123" weight="1"/>
</writeHost>
</dataHost>
</mycat:schema>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
<system>
<property name="defaultSqlParser">druidparser</property>
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
<property name="mutiNodePatchSize">100</property> 亿级数量排序批量
<property name="processors">32</property> <property name="processorExecutor">32</property>
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
</system>
<!--管理员账户,拥有所库的读写-->
<user name="root">
<property name="password">1qazXSW2!@123</property>
<property name="schemas">palmtax,public_platform,taxtao</property>
</user>
<!--税道账户,只拥有税道库的读写-->
<user name="taxtao_user">
<property name="password">taxtaoUser!@123</property>
<property name="schemas">taxtao</property>
</user>
<!--掌中财税账户,只拥有掌中财税库的读写-->
<user name="palmtax_user">
<property name="password">palmtaxUser!@123</property>
<property name="schemas">palmtax</property>
</user>
<!--公共功能账户,只拥有公共库的读写-->
<user name="public_pt_user">
<property name="password">publicPtUser!@123</property>
<property name="schemas">public_platform</property>
</user>
</mycat:server>
进入到mycat/bin
目录
cd /usr/local/mycat/bin/
(1) 控制台启动,这种启动方式在控制台关闭后,MyCat服务也将关闭,适合调试使用:
./mycat console
(1) 可以采用以下后台启动的方式:
./mycat start ##启动
./mycat restart ##重启
./mycat stop ##关闭
MyCat的默认数据端口为8066
,mycat通过这个端口接收数据库客户端的访问请求。
管理端口为9066
,用来接收mycat监控命令、查询mycat运行状况、重新加载配置文件等
连接mycat和连接mysql方式一样的,可以通过mysql客户端连接,或使用第三方MySQL管理客户端连接MyCat测试(navicat支持,MySQL-Front兼容性不太好),这里就不做多余介绍。
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
port=3306
## 设置server_id,一般设置为IP
server-id =143
character-set-server = utf8
general_log = 1
skip-name-resolve
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 28M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
myisam_sort_buffer_size = 8M
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES
## 复制过滤:需要备份的数据库,输出binlog
## 官方文档推荐的是,在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
#binlog-do-db=public_platform,palmtax,taxtao
## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,可以随便取,最好有含义
log-bin=yhsoft-test-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=100M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
systemctl restart mysqld.service
然后使用命令systemctl status mysql.service
查看MySQL数据库启动后的服务状态
mysql -uroot -p
创建数据同步用户,并授予相应的权限
grant replication slave, replication client on *.* to 'repl'@'192.168.1.144' identified by '1qazXSW2!@';
刷新授权表信息
flush privileges;
查看position号,记下position号(从机上需要用到这个position号和现在的日志文件)
show master status;
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
port=3306
## 设置server_id,一般设置为IP
server-id = 144
character-set-server = utf8
general_log = 1
skip-name-resolve
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 28M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
myisam_sort_buffer_size = 8M
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES
## 复制过滤:需要备份的数据库,输出binlog
#binlog-do-db=roncoo
##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志,以备Slave作为其它Slave的Master时使用
log-bin=test-mysql-slave1-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 100M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 需要同步的数据库
#replication-do-db=public_platform,palmtax,taxtao
## relay_log配置中继日志
relay_log=test-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
systemctl restart mysqld.service
然后使用命令systemctl status mysql.service
查看MySQL数据库启动后的服务状态
mysql -uroot -p
change master to master_host='192.168.1.143', master_user='repl', master_password='1qazXSW2!@', master_port=3306, master_log_file='143-mysql-bin.000001', master_log_pos=1389, master_connect_retry=30;
上面执行的命令的解释:
master_host='192.168.1.143' ## Master的IP地址
master_user='rep1' ##用于同步数据的用户(在Master中授权的用户)
master_password='1qazXSW2!@' ## 同步数据用户的密码
master_port=3306 ## Master数据库服务的端口
master_log_file='143-mysql-bin.000001' ##指定Slave从哪个日志文件开始读复制数据(可在Master上使用show master status查看到日志文件名)
master_log_pos=429 ## 从哪个POSITION号开始读
master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。
show slave status\G;
可看到Slave_IO_State为空, Slave_IO_Running和Slave_SQL_Running是No,表明Slave还没有开始复制过程。
start slave;
再查看主从同步状态
show slave status\G;
主要看以下两个参数,这两个参数如果是Yes就表示主从同步正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
由主从同步状态信息可以看出,我们配置的主从同步是正常的。
可查看master和slave上线程的状态。在master上,可以看到slave的I/O线程创建的连接
推荐使用中文集成版
,其中包含Node.js需要的模块包node_modules
。
若使用中文标准版
,需使用npm install --production
进行安装,记得配置一下国内镜像,不然会比较慢。
config.sample.js
文件并命名为config.js
config.js
中的配置 url
:博客域名地址 database
:默认生产配置production
的数据库为sqlite3,建议修改为mysql server
:ghost服务器地址和端口 阿里云
、七牛
等来进行存储nvm use
选择支持的Node.js版本:0.10.x、0.12.x、4.2.xnpm install --production
安装依赖包,中文集成版
跳过此步。npm start
启动Ghost,进行本地开发与测试http://yourhost/ghost
上一章节上通过npm start
并非后台运行,在线上部署的时候可通过forever
使ghost以后台任务方式运行
npm install forever -g
NODE_ENV=production forever start index.js
forever stop index.js
进程检查:执行forever list
create user 'zeroteam'@'%' identified by 'p@ssW0rd123';
grant all privileges on zeroteam_blog_db.* to 'zeroteam'@'%';
grant all privileges on zeroteam_blog_db_dev.* to 'zeroteam'@'%';
yum -y install nfs-utils rpcbind
mkdir -p /data/upload
vi /etc/exports
#增加一行:
/data/upload 192.168.1.180(rw,no_root_squash,no_all_squash,sync)
exportfs -r
注:配置文件说明:
/data/upload 为共享的目录,使用绝对路径。
192.168.1.180(rw,no_root_squash,no_all_squash,sync) 为客户端的地址及权限,地址可以是一个网段,一个IP地址或者是一个域名,域名支持通配符,如:*.izerofx.com,地址与权限中间没有空格,权限说明:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
systemctl start rpcbind #启动
systemctl restart rpcbind #重启
systemctl enable rpcbind #启用开机启动
yum -y install nfs-utils rpcbind
mkdir -p /data/upload
showmount -e 192.168.1.180
Export list for 192.168.1.181:
/data/upload 192.168.1.180
如果显示:rpc mount export: RPC: Unable to receive; errno = No route to host,则需要在服务端关闭防火墙(稍候会详细说)。
mount -t nfs 192.168.1.180:/data/upload /data/upload
umount /data/upload
vi /etc/service
mountd 1011/tcp #rpc.mountd
mountd 1011/udp #rpc.mountd
rquotad 1012/tcp #rpc.rquotad
rquotad 1012/udp #rpc.rquotad
systemctl restart nfs
#portmap
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 111 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 111 -j ACCEPT
#nfsd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 2049 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 2049 -j ACCEPT
#mountd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 1011 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 1011 -j ACCEPT
#rquotad
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 1012 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 1012 -j ACCEPT
#rpc.statd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 32768 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 32768 -j ACCEPT
客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:
mount -t nfs 192.168.1.180:/data/upload /data/upload -o proto=tcp -o nolock
根据Linux发行版本(CentOS、Fedora都属于红帽系),从PostgreSQL官方(https://yum.postgresql.org/repopackages.php
)获取Yum Repository。
wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装完PostgreSQL的Yum Repository,每次执行yum update都会检查PostgreSQL是否更新。
yum -y install pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql10-server postgresql10
/usr/pgsql-10/bin/postgresql-10-setup initdb
systemctl enable postgresql-10
systemctl start postgresql-10
登录数据库
sqlplus / as sysdba
关闭数据库
shutdown immediate;
lsnrctl stop
cd /home/app/oracle/product/12.2.0/dbhome_1/deinstall
./deinstall
rm -rf /etc/oraInst.loc
rm -rf /etc/oratab
rm -rf /opt/ORCLfmap
rm -rf /usr/local/bin/coraenv
rm -rf /usr/local/bin/dbhome
rm -rf /usr/local/bin/oraenv
rm -rf /tmp/OraInstall*
rm -rf /tmp/deinstall*
rm -rf /tmp/hsperfdata_oracle
rm -rf /home/app/oracle/*
userdel oracle
groupdel dba
groupdel oinstall
systemctl stop docker
通过命令df -h先去看下磁盘大概的情况,找一个大的空间。然后创建docker的新目录,我这边直接放在新挂载的数据盘/data,所以我这边的新目录地址是/data/docker/lib/
mkdir -p /data/docker/lib
rsync -avzP /var/lib/docker /data/docker/lib/
先确认是否安装了rsync
参数解释:
vi /lib/systemd/system/docker.service
在找到ExecStart加入:
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
启动之后确认docker没有问题,删除旧的/var/lib/docker/目录
cat /dev/null > catalina.out
错误信息如下
Error Code : 1418
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
(0 ms taken)
分析:
根据系统提示,导致该错误的原因可能是一个安全设置方面的配置,查手册log_bin_trust_function_creators参数缺省0,是不允许function的同步的,一般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped。
处理过程:
登陆mysql数据库
set global log_bin_trust_function_creators = 1;
commit;
start slave;
跟踪mysql的启动日志,slave正常运行,问题解决。
mycat启动后,不能进行任何数据库的操作,报Unknown charsetIndex:224错误
从错误看是因为字符集问题引起的 ,因为我MYSQL服务器默认使用的是utf8mb4,所以修改mycat字符集的配置文件
vi index_to_charset.properties
在配置文件最后加入224=utf8mb4,重启服务即正常
修改server.xml,设置默认编码
<property name="charset">utf8mb4</property>
直接恢复到指定的时间点
mysqlbinlog --no-defaults --stop-datetime="2016-07-25 00:00:00" /var/lib/mysql/mysql-master-01-bin.000005 | mysql -uroot -p
把日志输入到txt文件
mysqlbinlog /var/lib/mysql/mysql-master-01-bin.000002 > /mydata/mysqllog.txt
把日志输入导出sql
mysqlbinlog -d taxtao test-150-bin.000002 >recover_taxtao.sql
mysqlbinlog -d taxtao --stop-datetime='2016-07-26 11:00:00' test-150-bin.000003 >>recover_taxtao.sql
由于恢复的文件recover_ivr.sql中包含了整个ivr数据库的所有表,我们只要恢复指定的表,还要对恢复出来的sql进行过滤。
more recover_taxtao.sql |grep --ignore-case -E 'insert|update|delete' -A2 -B2|grep core_base_account > core_base_account.sql
将过滤后的结果保存为sql脚本,恢复到数据库即可。
cat zbus.sh | col -b > zbus2.sh
修改: vi /etc/selinux/config
SELINUX=disabled
执行setenforce 0
生效
显示当前路由
route print -4
删除默认路由表
// -p 参数表示永久保存(重启不会失效)
route delete 0.0.0.0 -p
添加内网路由
// route add 网段 mask 子网掩码 网关(一般为dhcp服务器地址) metric 优先级(值越,优先级越高), 下面的网段和网关地址需要换成你自己的
route -p add 10.122.10.0 mask 255.255.255.0 10.122.10.1 metric 20
添加外网路由
route -p add 0.0.0.0 mask 0.0.0.0 192.168.2.1 metric 20
注意事项: 外网的优先级不能比内网高,否则所有的流量都走了外网,从而无法访问内网