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" ))
@@ -38,21 +35,49 @@ def wait_for_mysql():
3835 connection .close ()
3936 return
4037
38+ def check_and_create_mysql_user ():
39+ connection = pymysql .connect (host = DB_HOST , port = DB_PORT , user = DB_ROOT_USER , passwd = DB_ROOT_PASSWD )
40+
41+ try :
42+ with connection .cursor () as cursor :
43+ if db_user != 'root' :
44+ query_user_exists = f"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE User='{ db_user } ' AND Host='%') AS user_exists;"
45+ cursor .execute (query_user_exists )
46+ result = cursor .fetchone ()
47+ user_exists = result [0 ] == 1
48+ if not user_exists :
49+ create_user_sql = f"CREATE USER '{ db_user } '@'%' IDENTIFIED BY '{ db_passwd } ';"
50+ cursor .execute (create_user_sql )
51+ print (f"Create user '{ db_user } '@'%' sucessfully." )
52+
53+ grant_privileges_sql = (
54+ f"GRANT ALL PRIVILEGES ON { DATABASE_NAME } .* TO '{ db_user } '@'%';"
55+ )
56+ for stmt in grant_privileges_sql .split (';' ):
57+ if stmt .strip ():
58+ cursor .execute (stmt )
59+ print (f"Granted user '{ db_user } '@'%' privileges sucessfully." )
60+
61+ cursor .execute ("FLUSH PRIVILEGES;" )
62+ finally :
63+ connection .close ()
4164
4265wait_for_mysql ()
4366
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 )
67+ sql = 'mysql -h %s -u%s -p%s -e "CREATE DATABASE IF NOT EXISTS %s;"' % (
68+ shlex .quote (DB_HOST ),
69+ shlex .quote (DB_ROOT_USER ),
70+ shlex .quote (DB_ROOT_PASSWD ),
71+ DATABASE_NAME ,
72+ )
73+ os .system (sql )
74+
75+ check_and_create_mysql_user ()
76+
5277sql = "mysql -h %s -u%s -p%s %s </opt/scheduler/database/initial_tables.sql" % (
5378 shlex .quote (DB_HOST ),
54- shlex .quote (db_user ),
55- shlex .quote (db_passwd ),
79+ shlex .quote (DB_ROOT_USER ),
80+ shlex .quote (DB_ROOT_PASSWD ),
5681 DATABASE_NAME ,
5782)
5883os .system (sql )
0 commit comments