99DB_PASSWD = os .getenv ("DB_PASSWD" )
1010db_user = ""
1111db_passwd = ""
12- if DB_ROOT_USER and DB_ROOT_PASSWD :
13- db_user = "root"
14- db_passwd = DB_ROOT_PASSWD
15- elif DB_USER and DB_PASSWD :
12+ if DB_USER :
1613 db_user = DB_USER
1714 db_passwd = DB_PASSWD
1815else :
1916 db_user = "root"
20- db_passwd = ""
17+ db_passwd = DB_ROOT_PASSWD
2118
2219DB_HOST = os .getenv ("DB_HOST" , "seatable-mysql" )
2320DB_PORT = int (os .getenv ("DB_PORT" , "3306" ))
@@ -39,20 +36,54 @@ def wait_for_mysql():
3936 return
4037
4138
39+ def check_and_create_mysql_user ():
40+ connection = pymysql .connect (
41+ host = DB_HOST , port = DB_PORT , user = DB_ROOT_USER , passwd = DB_ROOT_PASSWD
42+ )
43+
44+ try :
45+ with connection .cursor () as cursor :
46+ if db_user != "root" :
47+ query_user_exists = f"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE User='{ db_user } ' AND Host='%') AS user_exists;"
48+ cursor .execute (query_user_exists )
49+ result = cursor .fetchone ()
50+ user_exists = result [0 ] == 1
51+ if not user_exists :
52+ create_user_sql = (
53+ f"CREATE USER '{ db_user } '@'%' IDENTIFIED BY '{ db_passwd } ';"
54+ )
55+ cursor .execute (create_user_sql )
56+ print (f"Create user '{ db_user } '@'%' sucessfully." )
57+
58+ grant_privileges_sql = (
59+ f"GRANT ALL PRIVILEGES ON { DATABASE_NAME } .* TO '{ db_user } '@'%';"
60+ )
61+ for stmt in grant_privileges_sql .split (";" ):
62+ if stmt .strip ():
63+ cursor .execute (stmt )
64+ print (f"Granted user '{ db_user } '@'%' privileges sucessfully." )
65+
66+ cursor .execute ("FLUSH PRIVILEGES;" )
67+ finally :
68+ connection .close ()
69+
70+
4271wait_for_mysql ()
4372
44- if db_user == "root" :
45- sql = 'mysql -h %s -u%s -p%s -e "CREATE DATABASE IF NOT EXISTS %s;"' % (
46- shlex .quote (DB_HOST ),
47- shlex .quote (db_user ),
48- shlex .quote (db_passwd ),
49- DATABASE_NAME ,
50- )
51- os .system (sql )
73+ sql = 'mysql -h %s -u%s -p%s -e "CREATE DATABASE IF NOT EXISTS %s;"' % (
74+ shlex .quote (DB_HOST ),
75+ shlex .quote (DB_ROOT_USER ),
76+ shlex .quote (DB_ROOT_PASSWD ),
77+ DATABASE_NAME ,
78+ )
79+ os .system (sql )
80+
81+ check_and_create_mysql_user ()
82+
5283sql = "mysql -h %s -u%s -p%s %s </opt/scheduler/database/initial_tables.sql" % (
5384 shlex .quote (DB_HOST ),
54- shlex .quote (db_user ),
55- shlex .quote (db_passwd ),
85+ shlex .quote (DB_ROOT_USER ),
86+ shlex .quote (DB_ROOT_PASSWD ),
5687 DATABASE_NAME ,
5788)
5889os .system (sql )
0 commit comments