Centos/Ubuntu JDK 安装及环境变量设置

1. rpm -ivh jdk-7-linux-x64.rpm
 
2. vi + /etc/profile
增加:
 
JAVA_HOME=/usr/java/jdk1.7.0
JRE_HOME=/usr/java/jdk1.7.0/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
 
3.使修改生效
 
source /etc/profile   //使修改立即生效
echo $PATH   //查看PATH值
 
Ubuntu:
 
<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> lrzsz
 
<span class="token function">sudo</span> <span class="token function">tar</span> -zxvf jdk-8u371-linux-x64.tar.gz
 
<span class="token function">vim</span> ~/.bashrc
 
export JAVA_HOME=/root/jdk/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
 
Esc键,:wq! 保存并退出。
 
<span class="token builtin class-name">source</span> ~/.bashrc
 
-----------------------
 
4.Mysql远程:
 
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
 
8.0以上
 
create user root@'%' identified by '123456';
 
grant all privileges on *.* to 'root'@'%';
 
flush privileges;
 
5.数据库优化:
 
#lower_case_table_names=1 #8.0以下
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Mysql/Mariadb 主从复制记录

主库:

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

# 不同步哪些数据库 
binlog-ignore-db = mysql 
binlog-ignore-db = test 
binlog-ignore-db = information_schema 

# 只同步哪些数据库,除此之外,其他不同步 
binlog-do-db = game

mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73 | test | manual,mysql |
+------------------+----------+--------------+------------------+
从库
[mysqld]
server-id=2 #设置server-id,必须唯一

CHANGE MASTER TO
MASTER_HOST='192.168.1.74',
MASTER_USER='root',
MASTER_PASSWORD='redhat',
MASTER_LOG_FILE='mysql-bin.000014',
MASTER_LOG_POS=313;

start slave;
show slave status\G;
  出问题后重新设置同步: 主库:
# 刷新主日志,这时主服务器会重新创建一个binlog文件

flush logs; 

# 查看主日志的版本号和位置,这时的主日志版本是mysql-bin.000060,位置是4710
  从库:
# 停止复制
mysql> stop replica;
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 修改主日志的版本和位置信息,跟master保持一致
mysql> change master to master_log_file ='mysql-bin.000060',master_log_pos=4710;
Query OK, 0 rows affected, 3 warnings (0.05 sec)

# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

# 启动复制
mysql> start replica;
Query OK, 0 rows affected (0.01 sec)
查错: select * from performance_schema.replication_applier_status_by_worker\G; Stop slave; Set @@SESSION.GTID_NEXT=’ d393d2e3-9b61-11e5-82bf-141877342ba0:171661170’ Begin; Commit; Set @@SESSION.GTID_NEXT = AUTOMATIC; Start slave;    

清理binlog日志

一、没有主从同步的情况下清理日志

mysql 定时清理5天前的binlog

mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)';  
mysql -u root -p  #进入mysql 控制台  
reset master;  #重置binlog  

二、MySQL主从同步下安全清理binlog日志

1、mysql  -u root -p   #进入从服务器mysql控制台  
show slave status\G;   #检查从服务器正在读取哪个日志,有多个从服务器,选择时间最早的一个做为目标日志。

2、进入主服务器mysql控制台

show master log;   #获得主服务器上的一系列日志  
PURGE MASTER LOGS TO 'binlog.000058';   #删除binlog.000005之前的,不包括binlog.000058  
PURGE MASTER LOGS BEFORE '2021-11-22 11:00:00';  #清除2021-11-22 11:00:00前binlog日志  
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);  #清除3天前binlog日志  

三、设置自动清理MySQL binlog日志

/etc/my.cnf #编辑配置

expire_logs_days = 15 #自动删除15天前的日志。默认值为0,表示从不删除。  
log-bin=mysql-bin #注释掉之后,会关闭binlog日志  
binlog_format=mixed #注释掉之后,会关闭binlog日志  

Mysql 时间函数

-- 今天
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00') AS '今天开始';
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') AS '今天结束';

-- 昨天
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') AS '昨天开始';
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 23:59:59') AS '昨天结束';

-- 上周
SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK), '%Y-%m-%d 00:00:00') AS '上周一';
SELECT DATE_FORMAT( SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1), '%Y-%m-%d 23:59:59') AS '上周末';

-- 本周
SELECT DATE_FORMAT( SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-1), '%Y-%m-%d 00:00:00') AS '本周一';
SELECT DATE_FORMAT( SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-7), '%Y-%m-%d 23:59:59') AS '本周末';
-- 上面的本周算法会有问题,因为mysql是按照周日为一周第一天,如果当前是周日的话,会把时间定为到下一周.
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), '%Y-%m-%d 00:00:00') AS '本周一';
SELECT DATE_FORMAT( DATE_ADD(SUBDATE(CURDATE(), WEEKDAY(CURDATE())), INTERVAL 6 DAY), '%Y-%m-%d 23:59:59') AS '本周末';

-- 上月
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01 00:00:00') AS '上月初';
SELECT DATE_FORMAT( LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59') AS '上月末';

-- 本月
SELECT DATE_FORMAT( CURDATE(), '%Y-%m-01 00:00:00') AS '本月初';
SELECT DATE_FORMAT( LAST_DAY(CURDATE()), '%Y-%m-%d 23:59:59') AS '本月末';
 

体验AWS的坚如磐石

忆往昔峥嵘岁月,记得Azure刚刚推出的时候,可以说是横空出世,无论性能和速度都要秒杀其他的云服务商,一度超越了很久。记得是2010、2011年左右,当时也做过世纪互联的代理,大概有2-3年的时间,除了贵一点,其他都是优点,转眼已经是2022年,由于跟单需求重新申请了azure的免费主机,结果却不如人意,不知道是不是针对免费和收费的有区别,现在的微软云掉线丢包有点严重,测试过美东、欧洲、亚洲等各个区域的机器,国内连接基本几分钟就要掉线一次,只能用二次跳板去连接挂机。 说回Aws,和azure鲜明的对比,免费的aws可以做到24小时不掉线,而且是欧洲的线路,已经开了2台aws,都是免费羊毛,系统稳定性也很强,在不开消耗应用的情况下1核1G内存的机器和8G的体验可以做到持平,国内电信连接24小时不卡顿,真正的坚如磐石。 日久见人心,也许这就是专业,aws是专业,azure可能只知道赚钱。 另外:由于aws的免费节点容易出现system interrupts  占用CPU100%的问题,解决这个问题只需要在aws控制台停止实例,然后重新启动实例就可以,这样就更换了一个物理节点。 原文:

Free tier instances are on heavily over subscribed hosts and have strict limitations on thd amount of the physical hardware that any instance can use. The interrupts you are seeing are not a process, but an aggregate psuedo process that represents all the lower level communocation between the hardware and the cpu.

If you have made no changes and this started happening the best way to resolve is to Stop and then Start the instance at the AWS level. This will cause your instance to start on a different physical node and can cause your issue to disappear as fast as it showed up.

Tesseract-OCR 安装

编译环境: gcc gcc-c++ make(这个环境一般机器都具备,可以忽略)  

yum install gcc gcc-c++ make


依赖的包: autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel leptonica(1.67以上)

1. autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel 可以通过yum安装:

yum install autoconf automake libtool
yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel


2. leptonica 需要源码编译安装

参考资料:
http://paramountideas.com/tesseract-ocr-30-and-leptonica-installation-centos-55-and-opensuse-113
http://www.leptonica.org/source/README.html
下载 leptonica 包: http://www.leptonica.org/source/leptonica-1.68.tar.gz
解压后切换到 leptonica-1.68 根目录  


./configure
make
make install


tesseract安装:
依赖安装完毕后开始安装tesseract
下载 tesseract-3.01 安装包: http://tesseract-ocr.googlecode.com/files/tesseract-3.01.tar.gz
解压后切换到 tesseract-3.01 根目录
(如果在make时遇到类似 strngs.h:1: error: stray '357' in program 的错误,请将 tesseract-3.01/ccutil/strngs.h 文件转为 ANSI 编码保存,再重新编译)  


./autogen.sh
./configure
make
make install
ldconfig


tesseract英文语言包安装:  
下载 tesseract-3.01 英文语言包: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01.eng.tar.gz
解压后将 tesseract-ocr/tessdata 下的所有文件全部拷贝到 /usr/local/share/tessdata 下
安装完毕.
测试一下:
切换到解压后的 tesseract-3.01 根目录(这个目录下有一个自带的 phototest.tif 可以做测试用)
命令行:

tesseract phototest.tif phototest -l eng


输出:

Tesseract Open Source OCR Engine v3.01 with Leptonica
Page 0


这时应该在当前目录生成一个 phototest.txt 文本文件,内容就是 phototest.tif 显示的文字.