diff --git a/class/plugin/orm.py b/class/plugin/orm.py index aac2b9e36..49bc65c18 100755 --- a/class/plugin/orm.py +++ b/class/plugin/orm.py @@ -11,6 +11,7 @@ class ORM: __DB_PASS = None __DB_USER = 'root' __DB_PORT = 3306 + __DB_NAME = '' __DB_HOST = 'localhost' __DB_CONN = None __DB_CUR = None @@ -27,21 +28,25 @@ class ORM: if os.path.exists(self.__DB_SOCKET): try: self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + database=self.__DB_NAME, port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor) except Exception as e: self.__DB_HOST = '127.0.0.1' self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + database=self.__DB_NAME, port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor) else: try: self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + database=self.__DB_NAME, port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, cursorclass=pymysql.cursors.DictCursor) except Exception as e: self.__DB_HOST = '127.0.0.1' self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, + database=self.__DB_NAME, port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, cursorclass=pymysql.cursors.DictCursor) @@ -69,6 +74,9 @@ class ORM: def getPwd(self): return self.__DB_PASS + def setDbName(self, name): + self.__DB_NAME = name + def execute(self, sql): # 执行SQL语句返回受影响行 if not self.__Conn(): diff --git a/plugins/mariadb/conf/my.cnf b/plugins/mariadb/conf/my.cnf index 8851e5b21..d7692aa33 100644 --- a/plugins/mariadb/conf/my.cnf +++ b/plugins/mariadb/conf/my.cnf @@ -45,11 +45,11 @@ skip-name-resolve = on log-bin=mysql-bin binlog_format=mixed -expire_logs_days = 10 slow_query_log=1 slow-query-log-file={$SERVER_APP_PATH}/data/mysql-slow.log long_query_time=3 #log_queries_not_using_indexes=on +binlog-expire-logs-seconds = 2592000 relay-log=mdserver relay-log-index=mdserver diff --git a/plugins/mariadb/index.py b/plugins/mariadb/index.py index 9ba058bd2..9c0cedfc3 100755 --- a/plugins/mariadb/index.py +++ b/plugins/mariadb/index.py @@ -150,7 +150,7 @@ def pSqliteDb(dbname='databases'): return conn -def pMysqlDb(): +def pMysqlDb(name=''): # pymysql db = mw.getMyORM() # MySQLdb | @@ -159,6 +159,7 @@ def pMysqlDb(): db.setDbConf(getConf()) db.setPort(getDbPort()) db.setSocket(getSocketFile()) + db.setDbName(name) pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root') db.setPwd(pwd) @@ -797,7 +798,7 @@ def syncGetDatabases(): if isError != None: return isError users = pdb.query( - "select User,Host from mysql.user where User!='root' AND Host!='localhost' AND Host!=''") + "select User,Host from user where User!='root' AND Host!='localhost' AND Host!=''") nameArr = ['information_schema', 'performance_schema', 'mysql', 'sys'] n = 0 @@ -893,16 +894,19 @@ def setRootPwd(version=''): password = args['password'] try: - pdb = pMysqlDb() + pdb = pMysqlDb('mysql') result = pdb.query("show databases") isError = isSqlError(result) if isError != None: return isError - result = pdb.execute( - "update mysql.user set Password=password('" + password + "') where User='root'") - pdb.execute("flush privileges") + cmd = "ALTER USER 'root'@'localhost' IDENTIFIED BY '" + password + "';" + r = pdb.execute(cmd) + # print(r) + pSqliteDb('config').where('id=?', (1,)).save('mysql_root', (password,)) + orm = pMysqlDb() + orm.execute("flush privileges") return mw.returnJson(True, '数据库root密码修改成功!') except Exception as ex: return mw.returnJson(False, '修改错误:' + str(ex)) @@ -910,7 +914,7 @@ def setRootPwd(version=''): def setUserPwd(version=''): args = getArgs() - data = checkArgs(args, ['password', 'name']) + data = checkArgs(args, ['password', 'name', 'id']) if not data[0]: return data[1] @@ -920,16 +924,28 @@ def setUserPwd(version=''): try: pdb = pMysqlDb() psdb = pSqliteDb('databases') - name = psdb.where('id=?', (uid,)).getField('name') + data = psdb.field('id,name,accept').where('id=?', (uid,)).find() - result = pdb.execute("update mysql.user set Password=password('" + - newpassword + "') where User='" + username + "'") + cmd = "SET PASSWORD FOR '" + username + \ + "'@'localhost' = PASSWORD('" + newpassword + "')" + r = pdb.execute(cmd) + # print(cmd, r) + + accept = data['accept'] + alist = accept.split(',') + for x in alist: + cmd = "SET PASSWORD FOR '" + username + \ + "'@'" + x + "' = PASSWORD('" + newpassword + "')" + r = pdb.execute(cmd) + # print(cmd, r) - pdb.execute("flush privileges") psdb.where("id=?", (uid,)).setField('password', newpassword) - return mw.returnJson(True, mw.getInfo('修改数据库[{1}]密码成功!', (name,))) + + orm = pMysqlDb() + orm.execute("flush privileges") + return mw.returnJson(True, mw.getInfo('修改数据库[{1}]密码成功!', (data['name'],))) except Exception as ex: - return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败[{2}]!', (name, str(ex),))) + return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败[{2}]!', (data['name'], str(ex),))) def setDbPs(): @@ -1031,7 +1047,7 @@ def delDb(): # 删除MYSQL result = pdb.execute("drop database `" + name + "`") - users = pdb.query("select Host from mysql.user where User='" + + users = pdb.query("select Host from user where User='" + username + "' AND Host!='localhost'") pdb.execute("drop user '" + username + "'@'localhost'") for us in users: @@ -1051,9 +1067,9 @@ def getDbAccess(): if not data[0]: return data[1] username = args['username'] - pdb = pMysqlDb() + pdb = pMysqlDb('mysql') - users = pdb.query("select Host from mysql.user where User='" + + users = pdb.query("select Host from user where User='" + username + "' AND Host!='localhost'") if len(users) < 1: @@ -1083,7 +1099,7 @@ def setDbAccess(): else: password = psdb.where("username=?", (name,)).getField('password') - users = pdb.query("select Host from mysql.user where User='" + + users = pdb.query("select Host from user where User='" + name + "' AND Host!='localhost'") for us in users: @@ -1105,11 +1121,11 @@ def setDbRw(version=''): uid = args['id'] rw = args['rw'] - pdb = pMysqlDb() + pdb = pMysqlDb('mysql') psdb = pSqliteDb('databases') dbname = psdb.where("id=?", (uid,)).getField('name') users = pdb.query( - "select Host from mysql.user where User='" + username + "'") + "select Host from user where User='" + username + "'") # show grants for demo@"127.0.0.1"; for x in users: @@ -1374,7 +1390,7 @@ def setDbMasterAccess(): pdb = pMysqlDb() psdb = pSqliteDb('master_replication_user') password = psdb.where("username=?", (username,)).getField('password') - users = pdb.query("select Host from mysql.user where User='" + + users = pdb.query("select Host from user where User='" + username + "' AND Host!='localhost'") for us in users: pdb.execute("drop user '" + username + "'@'" + us["Host"] + "'") @@ -1706,7 +1722,7 @@ def delMasterRepSlaveUser(version=''): pdb.execute("drop user '" + name + "'@'%'") pdb.execute("drop user '" + name + "'@'localhost'") - users = pdb.query("select Host from mysql.user where User='" + + users = pdb.query("select Host from user where User='" + name + "' AND Host!='localhost'") for us in users: pdb.execute("drop user '" + name + "'@'" + us["Host"] + "'")