主要是因为redhat6.2有某些特殊需求,还要继续使用,所以通过安装低版本python3来解决ob的使用需求。
一、准备好oceanbase所需要的java1.8
1、取得jdk-8u391-linux-x64.tar.gz
2、解压jdk-8u391-linux-x64.tar.gz
3、mv jdk1.8.0_391/ /usr/local
二、安装python3.6.15
1、取得Python-3.6.15.tgz
2、解压tar zxvf Python-3.6.15.tgz
3、安装支持包
yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum -y install libffi libffi-devel
4、编译安装python3.6.15
cd Python-3.6.15
./configure --prefix=/usr/local/python3.6.15 --enable-shared CFLAGS=-fPIC --enable-optimizations
make
make install
5、使用验证python3.6.15
ver=3.6.15
cd /usr/bin
ln -sv /usr/local/python${ver}/bin/python3 python${ver}
ln -sv /usr/local/python${ver}/bin/pip3 pip${ver}
ln -sv /usr/local/python${ver}/bin/python3 python${ver}
mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
EOF
http_proxy=proxy.app.cz:8080
https_proxy=proxy.app.cz:8080
ftp_proxy=proxy.app.cz:8080
RSYNC_PROXY=proxy.app.cz:8080
export ftp_proxy
export http_proxy
export https_proxy
export RSYNC_PROXY
cat > /etc/ld.so.conf.d/python3.6.15.conf <<EOF
/usr/local/python3.6.15/lib
EOF
ldconfig
pip3.6.15 install --upgrade pip
pip3.6.15 install virtualenv
ln -sv /usr/local/python3.6.15/bin/virtualenv /usr/bin/virtualenv3.6.15
su - user01
virtualenv venv3.6.15
mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
EOF
http_proxy=proxy.app.cz:8080
https_proxy=proxy.app.cz:8080
ftp_proxy=proxy.app.cz:8080
RSYNC_PROXY=proxy.app.cz:8080
export ftp_proxy
export http_proxy
export https_proxy
export RSYNC_PROXY
source ~/venv3.6.15/bin/activate
pip install JayDeBeApi
export JAVA_HOME=/usr/local/jdk1.8.0_391/jre
java -version
6、db_query_obDb_getSettledate-1.sh
export JAVA_HOME=/usr/local/jdk1.8.0_391/jre
source .venv3.6.15/bin/activate
python db_query_obDb_getSettledate-1.py x.x.x.x:2883 用户@租户#集群 用户密码
7、db_query_obDb_getSettledate-1.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
encoding = "utf8"
import sys
import os
import jaydebeapi
import logging
# 创建logger对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) # log等级总开关
# log输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
# 控制台handler
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO) # log等级的开关
stream_handler.setFormatter(formatter)
# 文件handler
#--------------------------------------------------------------------
root_dir = os.path.expanduser("~")
logdir = root_dir + "/log"
if os.path.exists(logdir):
pass
#print("日志目录存在")
else:
print("日志目录" + logdir + "不存在")
os.mkdir(logdir)
if os.path.exists(logdir):
pass
else:
print("创建日志目录" + logdir + "失败!")
exit(1)
file_handler = logging.FileHandler(root_dir + "/log/" + f'{__name__.split(".")[0]}.log' + ".log")
#--------------------------------------------------------------------
file_handler.setLevel(logging.INFO) # log等级的开关
file_handler.setFormatter(formatter)
# 添加到logger
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
def db_query_obDb(url,user,password):
homeDir = os.path.expanduser("~")
#print(homeDir)
driver = 'com.alipay.oceanbase.jdbc.Driver'
jarFile = homeDir + '/lib/oceanbase-client-2.2.10.jar'
sqlStr = "select to_char(t.settledate-1,'YYYYMMDD') from test_settledate t"
conn = jaydebeapi.connect(driver, url, [user, password], jarFile)
curs = conn.cursor()
curs.execute(sqlStr)
result = curs.fetchall()
settledate=''.join(result[0])[:10]
#settledate=""
#for row in curs :
# print(row)
# settledate=row[0]
#print(type(settledate))
print(settledate)
curs.close()
conn.close()
return settledate
if __name__ == '__main__':
len_sys_argv = len(sys.argv)
logger.info("参数个数len(sys.argv)=%d" % len_sys_argv )
logger.info ("输出所有参数:")
argv_num = 0
for argv_num in range(0,len_sys_argv):
now_argv = argv_num,sys.argv[argv_num]
logger.info("%d sys.argv[%d]=%s" % (argv_num,argv_num,now_argv))
argv_num = argv_num +1
#设定参数个数
#####################
len_sys_argv_std = 3
len_sys_argv_practical = len_sys_argv -1
if len_sys_argv_practical < len_sys_argv_std:
logger.info ('参数个数必须 >= %d , 现值 = %d < %d' % (len_sys_argv_std,len_sys_argv_practical,len_sys_argv_std))
logger.info ("""
参数一: OB的IP&port
参数二: OB的用户名
参数三: OB的密码
""")
sys.exit()
IpPort = sys.argv[1]
url = 'jdbc:oceanbase://' + IpPort
user = sys.argv[2]
password = sys.argv[3]
#url = 'jdbc:oceanbase://10.1.1.1:2883'
#user = 'dbuser1@dbrun#obdb:1122334444'
#password = 'Pass1111'
db_query_obDb(url,user,password)
8、将oceanbase-client-2.2.10.jar放至所需 的~/lib目录
su - user1
cd ~/lib
get oceanbase-client-2.2.10.jar
9、测试
sh db_query_obDb__getSettledate-1.sh
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:78] - INFO: 参数个数len(sys.argv)=4
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:80] - INFO: 输出所有参数:
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:84] - INFO: 0 sys.argv[0]=(0, 'db_query_obDb__getSettledate-1.py')
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:84] - INFO: 1 sys.argv[1]=(1, '10.1.1.1:2883')
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:84] - INFO: 2 sys.argv[2]=(2, 'dbuser1@dbrun#obdb:1122334444')
2024-01-30 19:09:49,563 - db_query_obDb__getSettledate-1.py[line:84] - INFO: 3 sys.argv[3]=(3, 'Pass1111')
20231201