|
|
|
@ -103,6 +103,8 @@ def getConf(): |
|
|
|
|
|
|
|
|
|
def getInitdTpl(version=''): |
|
|
|
|
path = getPluginDir() + '/init.d/mysql' + version + '.tpl' |
|
|
|
|
if not os.path.exists(path): |
|
|
|
|
path = getPluginDir() + '/init.d/mysql.tpl' |
|
|
|
|
return path |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -161,6 +163,11 @@ def initDreplace(version=''): |
|
|
|
|
if not os.path.exists(mysql_conf_dir): |
|
|
|
|
os.mkdir(mysql_conf_dir) |
|
|
|
|
|
|
|
|
|
mysql_tmp = getServerDir() + '/tmp' |
|
|
|
|
if not os.path.exists(mysql_tmp): |
|
|
|
|
os.mkdir(mysql_tmp) |
|
|
|
|
mw.execShell("chown -R mysql:mysql " + mysql_tmp) |
|
|
|
|
|
|
|
|
|
mysql_conf = mysql_conf_dir + '/my.cnf' |
|
|
|
|
if not os.path.exists(mysql_conf): |
|
|
|
|
mysql_conf_tpl = getPluginDir() + '/conf/my' + version + '.cnf' |
|
|
|
@ -291,8 +298,8 @@ def initMysqlData(): |
|
|
|
|
cmd = 'cd ' + serverdir + ' && ./scripts/mysql_install_db --user=' + \ |
|
|
|
|
user + ' --basedir=' + serverdir + ' --ldata=' + datadir |
|
|
|
|
mw.execShell(cmd) |
|
|
|
|
return 0 |
|
|
|
|
return 1 |
|
|
|
|
return False |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initMysql57Data(): |
|
|
|
@ -302,10 +309,10 @@ def initMysql57Data(): |
|
|
|
|
myconf = serverdir + "/etc/my.cnf" |
|
|
|
|
user = pGetDbUser() |
|
|
|
|
cmd = 'cd ' + serverdir + ' && ./bin/mysqld --defaults-file=' + myconf + \ |
|
|
|
|
' --initialize --explicit_defaults_for_timestamp' |
|
|
|
|
' --initialize-insecure --explicit_defaults_for_timestamp' |
|
|
|
|
mw.execShell(cmd) |
|
|
|
|
return 0 |
|
|
|
|
return 1 |
|
|
|
|
return False |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initMysql8Data(): |
|
|
|
@ -313,12 +320,16 @@ def initMysql8Data(): |
|
|
|
|
if not os.path.exists(datadir + '/mysql'): |
|
|
|
|
serverdir = getServerDir() |
|
|
|
|
user = pGetDbUser() |
|
|
|
|
# cmd = 'cd ' + serverdir + ' && ./bin/mysqld --basedir=' + serverdir + ' --datadir=' + \ |
|
|
|
|
# datadir + ' --initialize' |
|
|
|
|
|
|
|
|
|
cmd = 'cd ' + serverdir + ' && ./bin/mysqld --basedir=' + serverdir + ' --datadir=' + \ |
|
|
|
|
datadir + ' --initialize' |
|
|
|
|
datadir + ' --initialize-insecure' |
|
|
|
|
|
|
|
|
|
# print(cmd) |
|
|
|
|
mw.execShell(cmd) |
|
|
|
|
return 0 |
|
|
|
|
return 1 |
|
|
|
|
return False |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initMysqlPwd(): |
|
|
|
@ -328,8 +339,8 @@ def initMysqlPwd(): |
|
|
|
|
|
|
|
|
|
pwd = mw.getRandomString(16) |
|
|
|
|
cmd_pass = serverdir + '/bin/mysqladmin -uroot password ' + pwd |
|
|
|
|
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (pwd,)) |
|
|
|
|
mw.execShell(cmd_pass) |
|
|
|
|
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (pwd,)) |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -347,62 +358,29 @@ def mysql8IsInitedPasswd(): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initMysql8Pwd(): |
|
|
|
|
is_start = False |
|
|
|
|
for x in range(60): |
|
|
|
|
data = mw.execShell( |
|
|
|
|
"ps -ef|grep mysql|grep -v grep|grep -v py|grep -v init.d|awk '{print $2}'") |
|
|
|
|
if data[0] != "": |
|
|
|
|
# print("mysql start ok!") |
|
|
|
|
is_start = True |
|
|
|
|
break |
|
|
|
|
time.sleep(0.5) |
|
|
|
|
|
|
|
|
|
if not is_start: |
|
|
|
|
# print("mysql start fail!") |
|
|
|
|
return False |
|
|
|
|
time.sleep(2) |
|
|
|
|
|
|
|
|
|
serverdir = getServerDir() |
|
|
|
|
pwd = mw.getRandomString(16) |
|
|
|
|
|
|
|
|
|
pass_cmd = "cat " + serverdir + \ |
|
|
|
|
"/data/error.log | grep root@localhost | awk -F 'root@localhost:' '{print $2}'" |
|
|
|
|
passdata = mw.execShell(pass_cmd) |
|
|
|
|
password = passdata[0].strip() |
|
|
|
|
|
|
|
|
|
if len(password) == 0: |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
# print('localhost', 3306, 'root', password, |
|
|
|
|
# "/www/server/mysql/mysql.sock") |
|
|
|
|
|
|
|
|
|
# import MySQLdb as mdb |
|
|
|
|
# dbconn = mdb.connect(host='localhost', port=3306, user='root', |
|
|
|
|
# passwd=password, unix_socket="/www/server/mysql/mysql.sock") |
|
|
|
|
# dbconn.autocommit(True) |
|
|
|
|
# dbcurr = dbconn.cursor() |
|
|
|
|
# dbcurr.execute('SET NAMES UTF8MB4') |
|
|
|
|
|
|
|
|
|
# # with mysql_native_password |
|
|
|
|
alter_root_pwd = 'flush privileges;' |
|
|
|
|
alter_root_pwd = alter_root_pwd + \ |
|
|
|
|
"alter user 'root'@'localhost' IDENTIFIED by '" + pwd + "';" |
|
|
|
|
alter_root_pwd = alter_root_pwd + \ |
|
|
|
|
"alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '" + pwd + "';" |
|
|
|
|
alter_root_pwd = alter_root_pwd + "flush privileges;" |
|
|
|
|
# dbcurr.execute(alter_root_pwd) |
|
|
|
|
|
|
|
|
|
cmd_pass = serverdir + '/bin/mysqladmin -uroot password root' |
|
|
|
|
data = mw.execShell(cmd_pass) |
|
|
|
|
# print(data) |
|
|
|
|
|
|
|
|
|
tmp_file = "/tmp/mysql_init_tmp.log" |
|
|
|
|
mw.writeFile(tmp_file, alter_root_pwd) |
|
|
|
|
cmd_pass = serverdir + '/bin/mysql --connect-expired-password -uroot -p"' + \ |
|
|
|
|
password + '" < ' + tmp_file |
|
|
|
|
# print(cmd_pass) |
|
|
|
|
cmd_pass = serverdir + '/bin/mysql -uroot -proot < ' + tmp_file |
|
|
|
|
|
|
|
|
|
data = mw.execShell(cmd_pass) |
|
|
|
|
if data[1].find("ERROR") != -1: |
|
|
|
|
# print(data[1]) |
|
|
|
|
pass |
|
|
|
|
else: |
|
|
|
|
mw.writeFile(serverdir + "/data/error.log", "") |
|
|
|
|
os.remove(tmp_file) |
|
|
|
|
# print(data) |
|
|
|
|
os.remove(tmp_file) |
|
|
|
|
|
|
|
|
|
pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (pwd,)) |
|
|
|
|
|
|
|
|
@ -413,9 +391,11 @@ def myOp(version, method): |
|
|
|
|
# import commands |
|
|
|
|
init_file = initDreplace() |
|
|
|
|
try: |
|
|
|
|
initData = initMysqlData() |
|
|
|
|
if initData == 0: |
|
|
|
|
isInited = initMysqlData() |
|
|
|
|
if not isInited: |
|
|
|
|
mw.execShell('systemctl start mysql') |
|
|
|
|
initMysqlPwd() |
|
|
|
|
mw.execShell('systemctl stop mysql') |
|
|
|
|
|
|
|
|
|
mw.execShell('systemctl ' + method + ' mysql') |
|
|
|
|
return 'ok' |
|
|
|
@ -424,39 +404,46 @@ def myOp(version, method): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def my8cmd(version, method): |
|
|
|
|
# mysql 8.0 and 5.7 ok |
|
|
|
|
# mysql 8.0 and 5.7 |
|
|
|
|
init_file = initDreplace(version) |
|
|
|
|
if version == '5.7': |
|
|
|
|
initMysql57Data() |
|
|
|
|
elif version == '8.0': |
|
|
|
|
initMysql8Data() |
|
|
|
|
cmd = init_file + ' ' + method |
|
|
|
|
try: |
|
|
|
|
if version == '5.7': |
|
|
|
|
isInited = initMysql57Data() |
|
|
|
|
elif version == '8.0': |
|
|
|
|
isInited = initMysql8Data() |
|
|
|
|
|
|
|
|
|
if not isInited: |
|
|
|
|
|
|
|
|
|
if mw.isAppleSystem(): |
|
|
|
|
cmd_init_start = init_file + ' start' |
|
|
|
|
subprocess.Popen(cmd_init_start, stdout=subprocess.PIPE, shell=True, |
|
|
|
|
bufsize=4096, stderr=subprocess.PIPE) |
|
|
|
|
|
|
|
|
|
if not mysql8IsInitedPasswd(): |
|
|
|
|
setSkipGrantTables(True) |
|
|
|
|
cmd_init_start = init_file + ' start' |
|
|
|
|
subprocess.Popen(cmd_init_start, stdout=subprocess.PIPE, shell=True, |
|
|
|
|
bufsize=4096, stderr=subprocess.PIPE) |
|
|
|
|
time.sleep(6) |
|
|
|
|
else: |
|
|
|
|
mw.execShell('systemctl start mysql') |
|
|
|
|
|
|
|
|
|
time.sleep(6) |
|
|
|
|
initMysql8Pwd() |
|
|
|
|
|
|
|
|
|
cmd_init_stop = init_file + ' stop' |
|
|
|
|
subprocess.Popen(cmd_init_stop, stdout=subprocess.PIPE, shell=True, |
|
|
|
|
bufsize=4096, stderr=subprocess.PIPE) |
|
|
|
|
setSkipGrantTables(False) |
|
|
|
|
if mw.isAppleSystem(): |
|
|
|
|
cmd_init_stop = init_file + ' stop' |
|
|
|
|
subprocess.Popen(cmd_init_stop, stdout=subprocess.PIPE, shell=True, |
|
|
|
|
bufsize=4096, stderr=subprocess.PIPE) |
|
|
|
|
time.sleep(3) |
|
|
|
|
else: |
|
|
|
|
mw.execShell('systemctl stop mysql') |
|
|
|
|
|
|
|
|
|
time.sleep(3) |
|
|
|
|
my8cmd(version, method) |
|
|
|
|
if mw.isAppleSystem(): |
|
|
|
|
sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, |
|
|
|
|
bufsize=4096, stderr=subprocess.PIPE) |
|
|
|
|
sub.wait(5) |
|
|
|
|
else: |
|
|
|
|
mw.execShell('systemctl ' + method + ' mysql') |
|
|
|
|
|
|
|
|
|
return 'ok' |
|
|
|
|
except Exception as e: |
|
|
|
|
return str(e) |
|
|
|
|
|
|
|
|
|
return 'fail' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def appCMD(version, action): |
|
|
|
|
if version == '8.0' or version == '5.7': |
|
|
|
@ -481,9 +468,8 @@ def reload(version=''): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initdStatus(): |
|
|
|
|
if not app_debug: |
|
|
|
|
if mw.isAppleSystem(): |
|
|
|
|
return "Apple Computer does not support" |
|
|
|
|
if mw.isAppleSystem(): |
|
|
|
|
return "Apple Computer does not support" |
|
|
|
|
|
|
|
|
|
shell_cmd = 'systemctl status mysql | grep loaded | grep "enabled;"' |
|
|
|
|
data = mw.execShell(shell_cmd) |
|
|
|
@ -673,7 +659,7 @@ def isSqlError(mysqlMsg): |
|
|
|
|
# 检测数据库执行错误 |
|
|
|
|
mysqlMsg = str(mysqlMsg) |
|
|
|
|
if "MySQLdb" in mysqlMsg: |
|
|
|
|
return mw.returnJson(False, 'MySQLdb组件缺失! <br>进入SSH命令行输入: pip install mysql-python') |
|
|
|
|
return mw.returnJson(False, 'MySQLdb组件缺失! <br>进入SSH命令行输入: pip install mysql-python | pip install mysqlclient==2.0.3') |
|
|
|
|
if "2002," in mysqlMsg: |
|
|
|
|
return mw.returnJson(False, '数据库连接失败,请检查数据库服务是否启动!') |
|
|
|
|
if "2003," in mysqlMsg: |
|
|
|
|