rc: mysql.c: code optimization and clean-up. One version for ARM and MIPS branch.

- in PRs please use #ifdef TCONFIG_BCMARM/#ifndef TCONFIG_BCMARM/etc to distinguish different branches
arm-sdk7
pedro 5 years ago
parent 04704235cc
commit e7d3e4a880

@ -4,6 +4,7 @@
* Copyright (C) 2014 bwq518, Hyzoom * Copyright (C) 2014 bwq518, Hyzoom
* *
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <rc.h> #include <rc.h>
#include <shutils.h> #include <shutils.h>
@ -12,6 +13,13 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <shared.h> #include <shared.h>
#define MYSQL_CONF "/etc/my.cnf"
#define MYSL_START_SCRIPT "/tmp/start_mysql.sh"
#define MYSQL_STOP_SCRIPT "/tmp/stop_mysql.sh"
#define MYSQL_PASSWD "/tmp/setpasswd.sql"
#define MYSQL_ANYHOST "/tmp/setanyhost.sql"
void start_mysql(void) void start_mysql(void)
{ {
FILE *fp; FILE *fp;
@ -25,239 +33,235 @@ void start_mysql(void)
stop_mysql(); stop_mysql();
/* only if enabled... */ /* only if enabled... */
if (!nvram_match("mysql_enable", "1")) return; if (!nvram_match("mysql_enable", "1"))
return;
if (nvram_match( "mysql_binary", "internal")) { if (nvram_match( "mysql_binary", "internal"))
strcpy(pbi, "/usr/bin"); strcpy(pbi, "/usr/bin");
} else if (nvram_match("mysql_binary", "optware"))
else if (nvram_match("mysql_binary", "optware")) {
strcpy(pbi, "/opt/bin"); strcpy(pbi, "/opt/bin");
} else
else {
strcpy(pbi, nvram_safe_get("mysql_binary_custom")); strcpy(pbi, nvram_safe_get("mysql_binary_custom"));
}
if (pbi[strlen(pbi)-1] =='/') pbi[strlen(pbi) - 1] ='\0'; if (pbi[strlen(pbi)-1] == '/')
pbi[strlen(pbi) - 1] = '\0';
splitpath(pbi, basedir, tmp1); splitpath(pbi, basedir, tmp1);
/* Generate download saved path based on USB partition (mysql_dlroot) and directory name (mysql_datadir) */ /* Generate download saved path based on USB partition (mysql_dlroot) and directory name (mysql_datadir) */
if (nvram_match("mysql_usb_enable", "1")) { if (nvram_match("mysql_usb_enable", "1")) {
tmp1[0] = 0; tmp1[0] = 0;
tmp2[0] = 0; tmp2[0] = 0;
strcpy(tmp1,nvram_safe_get("mysql_dlroot")); strcpy(tmp1, nvram_safe_get("mysql_dlroot"));
trimstr(tmp1); trimstr(tmp1);
if (tmp1[0] != '/') { if (tmp1[0] != '/') {
memset(tmp2, 0, 256);
sprintf(tmp2, "/%s", tmp1); sprintf(tmp2, "/%s", tmp1);
strcpy(tmp1,tmp2); strcpy(tmp1, tmp2);
} }
strcpy(ppr, tmp1); strcpy(ppr, tmp1);
if (ppr[strlen(ppr)-1] == '/') { if (ppr[strlen(ppr) - 1] == '/')
ppr[strlen(ppr)-1] = 0; ppr[strlen(ppr) - 1] = 0;
}
if (strlen(ppr) == 0) { if (strlen(ppr) == 0) {
syslog(LOG_ERR, "Found no mounted USB partition. You must mount a USB disk first."); syslog(LOG_ERR, "No mounted USB partition found. You must mount a USB disk first");
return; return;
} }
} }
else { else
ppr[0] = '\0'; ppr[0] = '\0';
}
strcpy(pdatadir, nvram_safe_get("mysql_datadir")); strcpy(pdatadir, nvram_safe_get("mysql_datadir"));
trimstr(pdatadir); trimstr(pdatadir);
if (pdatadir[strlen(pdatadir)-1] == '/') { if (pdatadir[strlen(pdatadir) - 1] == '/')
pdatadir[strlen(pdatadir)-1] = 0; pdatadir[strlen(pdatadir) - 1] = 0;
}
if (strlen(pdatadir) == 0) { if (strlen(pdatadir) == 0) {
strcpy (pdatadir, "data"); strcpy (pdatadir, "data");
nvram_set("mysql_dir", "data"); nvram_set("mysql_dir", "data");
} }
if (pdatadir[0] == '/') { memset(full_datadir, 0, 256);
if (pdatadir[0] == '/')
sprintf(full_datadir, "%s%s", ppr, pdatadir); sprintf(full_datadir, "%s%s", ppr, pdatadir);
} else
else {
sprintf(full_datadir, "%s/%s", ppr, pdatadir); sprintf(full_datadir, "%s/%s", ppr, pdatadir);
}
strcpy(ptmpdir, nvram_safe_get("mysql_tmpdir")); strcpy(ptmpdir, nvram_safe_get("mysql_tmpdir"));
trimstr(ptmpdir); trimstr(ptmpdir);
if (ptmpdir[strlen(ptmpdir)-1] == '/') { if (ptmpdir[strlen(ptmpdir) - 1] == '/')
ptmpdir[strlen(ptmpdir)-1] = 0; ptmpdir[strlen(ptmpdir) - 1] = 0;
}
if (strlen(ptmpdir) == 0) { if (strlen(ptmpdir) == 0) {
strcpy (ptmpdir, "tmp"); strcpy (ptmpdir, "tmp");
nvram_set("mysql_tmpdir", "tmp"); nvram_set("mysql_tmpdir", "tmp");
} }
if (ptmpdir[0] == '/') { memset(full_tmpdir, 0, 256);
if (ptmpdir[0] == '/')
sprintf(full_tmpdir, "%s%s", ppr, ptmpdir); sprintf(full_tmpdir, "%s%s", ppr, ptmpdir);
} else
else {
sprintf(full_tmpdir, "%s/%s", ppr, ptmpdir); sprintf(full_tmpdir, "%s/%s", ppr, ptmpdir);
}
/* config file /etc/my.cnf */ /* config file /etc/my.cnf */
if (!(fp = fopen("/etc/my.cnf", "w"))) { if (!(fp = fopen(MYSQL_CONF, "w"))) {
syslog(LOG_ERR, "Can not open /etc/my.cnf for writing."); perror(MYSQL_CONF);
return; return;
} }
fprintf(fp,
"[client]\n" fprintf(fp, "[client]\n"
"port = %s\n" "port = %s\n"
"socket = /var/run/mysqld.sock\n\n" "socket = /var/run/mysqld.sock\n\n"
"[mysqld]\n" "[mysqld]\n"
"user = root\n" "user = root\n"
"socket = /var/run/mysqld.sock\n" "socket = /var/run/mysqld.sock\n"
"port = %s\n" "port = %s\n"
"basedir = %s\n\n" "basedir = %s\n\n"
"datadir = %s\n" "datadir = %s\n"
"tmpdir = %s\n\n" "tmpdir = %s\n\n"
"skip-external-locking\n", "skip-external-locking\n",
nvram_safe_get("mysql_port"), nvram_safe_get("mysql_port"),
nvram_safe_get("mysql_port"), nvram_safe_get("mysql_port"),
basedir, basedir,
full_datadir, full_datadir,
full_tmpdir); full_tmpdir);
if (nvram_match("mysql_allow_anyhost", "1")) if (nvram_match("mysql_allow_anyhost", "1"))
fprintf(fp, "bind-address = 0.0.0.0\n"); fprintf(fp, "bind-address = 0.0.0.0\n");
else else
fprintf(fp, "bind-address = 127.0.0.1\n"); fprintf(fp, "bind-address = 127.0.0.1\n");
fprintf(fp, "key_buffer_size = %sM\n"
"max_allowed_packet = %sM\n"
"thread_stack = %sK\n"
"thread_cache_size = %s\n\n"
"table_open_cache = %s\n"
"sort_buffer_size = %sK\n"
"read_buffer_size = %sK\n"
"read_rnd_buffer_size = %sK\n"
"query_cache_size = %sM\n"
"max_connections = %s\n"
"#The following items are from mysql_server_custom\n"
"%s\n"
"#end of mysql_server_custom\n\n"
"[mysqldump]\n"
"quick\nquote-names\n"
"max_allowed_packet = 16M\n"
"[mysql]\n\n"
"[isamchk]\n"
"key_buffer_size = 8M\n"
"sort_buffer_size = 8M\n\n",
nvram_safe_get("mysql_key_buffer"),
nvram_safe_get("mysql_max_allowed_packet"),
nvram_safe_get("mysql_thread_stack"),
nvram_safe_get("mysql_thread_cache_size"),
nvram_safe_get("mysql_table_open_cache"),
nvram_safe_get("mysql_sort_buffer_size"),
nvram_safe_get("mysql_read_buffer_size"),
nvram_safe_get("mysql_read_rnd_buffer_size"),
nvram_safe_get("mysql_query_cache_size"),
nvram_safe_get("mysql_max_connections"),
nvram_safe_get("mysql_server_custom"));
fprintf(fp,
"key_buffer_size = %sM\n"
"max_allowed_packet = %sM\n"
"thread_stack = %sK\n"
"thread_cache_size = %s\n\n"
"table_open_cache = %s\n"
"sort_buffer_size = %sK\n"
"read_buffer_size = %sK\n"
"read_rnd_buffer_size = %sK\n"
"query_cache_size = %sM\n"
"max_connections = %s\n"
"#The following items are from mysql_server_custom\n"
"%s\n"
"#end of mysql_server_custom\n\n"
"[mysqldump]\n"
"quick\nquote-names\n"
"max_allowed_packet = 16M\n"
"[mysql]\n\n"
"[isamchk]\n"
"key_buffer_size = 8M\n"
"sort_buffer_size = 8M\n\n",
nvram_safe_get("mysql_key_buffer"),
nvram_safe_get("mysql_max_allowed_packet"),
nvram_safe_get("mysql_thread_stack"),
nvram_safe_get("mysql_thread_cache_size"),
nvram_safe_get("mysql_table_open_cache"),
nvram_safe_get("mysql_sort_buffer_size"),
nvram_safe_get("mysql_read_buffer_size"),
nvram_safe_get("mysql_read_rnd_buffer_size"),
nvram_safe_get("mysql_query_cache_size"),
nvram_safe_get("mysql_max_connections"),
nvram_safe_get("mysql_server_custom"));
fclose(fp); fclose(fp);
/* start file */ /* start script */
if(!(fp = fopen( "/tmp/start_mysql.sh", "w"))) { if (!(fp = fopen(MYSL_START_SCRIPT, "w"))) {
syslog(LOG_ERR, "Can not open /tmp/start_mysql.sh for writing."); perror(MYSL_START_SCRIPT);
return; return;
} }
fprintf(fp, fprintf(fp, "#!/bin/sh\n\n"
"#!/bin/sh\n\n" "BINPATH=%s\n"
"BINPATH=%s\n" "PID=/var/run/mysqld.pid\n"
"PID=/var/run/mysqld.pid\n" "NEW_INSTALL=0\n"
"NEW_INSTALL=0\n" "MYLOG=/var/log/mysql.log\n"
"MYLOG=/var/log/mysql.log\n" "ROOTNAME=$(nvram get mysql_username)\n"
"ROOTNAME=`nvram get mysql_username`\n" "ROOTPASS=$(nvram get mysql_passwd)\n"
"ROOTPASS=`nvram get mysql_passwd`\n" "NGINX_DOCROOT=$(nvram get nginx_docroot)\n"
"NGINX_DOCROOT=`nvram get nginx_docroot`\n" "ANYHOST=$(nvram get mysql_allow_anyhost)\n"
"ANYHOST=`nvram get mysql_allow_anyhost`\n" "alias elog=\"logger -t mysql -s\"\n"
"alias elog=\"logger -t mysql -s\"\n" "sleep %s\n"
"sleep %s\n" "rm -f $MYLOG\n"
"rm -f $MYLOG\n" "touch $MYLOG\n"
"touch $MYLOG\n" "[ ! -d \"%s\" ] && {\n"
"if [ ! -d \"%s\" ]; then\n" " elog \"datadir in "MYSQL_CONF" doesn't exist. Creating ...\"\n"
" elog \"datadir in /etc/my.cnf doesn't exist. Creating ...\"\n" " mkdir -p %s\n"
" mkdir -p %s\n" " [ -d \"%s\" ] && {\n"
" if [ -d \"%s\" ]; then\n" " elog \"Created successfully\"\n"
" elog \"Created successfully.\"\n" " } || {\n"
" else\n" " elog \"Created failed. exit\"\n"
" elog \"Created failed. exit.\"\n" " exit 1\n"
" exit 1\n" " }\n"
" fi\n" "}\n"
"fi\n" "[ ! -d \"%s\" ] && {\n"
"if [ ! -d \"%s\" ]; then\n" " elog \"tmpdir in "MYSQL_CONF" doesn't exist. creating ...\"\n"
" elog \"tmpdir in /etc/my.cnf doesn't exist. creating ...\"\n" " mkdir -p %s\n"
" mkdir -p %s\n" " [ -d \"%s\" ] && {\n"
" if [ -d \"%s\" ]; then\n" " elog \"Created successfully\"\n"
" elog \"Created successfully.\"\n" " } || {\n"
" else\n" " elog \"Created failed. exit\"\n"
" elog \"Created failed. exit.\"\n" " exit 1\n"
" exit 1\n" " }\n"
" fi\n" "}\n"
"fi\n" "[ ! -f \"%s/mysql/tables_priv.MYD\" ] && {\n"
"if [ ! -f \"%s/mysql/tables_priv.MYD\" ]; then\n" " NEW_INSTALL=1\n"
" NEW_INSTALL=1\n" " echo \"=========Found NO tables_priv.MYD====================\" >> $MYLOG\n"
" echo \"=========Found NO tables_priv.MYD====================\" >> $MYLOG\n" " echo \"This is new installed MySQL.\" >> $MYLOG\n"
" echo \"This is new installed MySQL.\" >> $MYLOG\n" "}\n"
"fi\n" "REINIT_PRIV_TABLES=$(nvram get mysql_init_priv)\n"
"REINIT_PRIV_TABLES=`nvram get mysql_init_priv`\n" "[[ $REINIT_PRIV_TABLES -eq 1 || $NEW_INSTALL -eq 1 ]] && {\n"
"if [[ $REINIT_PRIV_TABLES -eq 1 || $NEW_INSTALL -eq 1 ]]; then\n" " echo \"=========mysql_install_db====================\" >> $MYLOG\n"
" echo \"=========mysql_install_db====================\" >> $MYLOG\n" " $BINPATH/mysql_install_db --user=root --force >> $MYLOG 2>&1\n"
" $BINPATH/mysql_install_db --user=root --force >> $MYLOG 2>&1\n" " elog \"Privileges table was already initialized\"\n"
" elog \"Privileges table was already initialized.\"\n" " nvram set mysql_init_priv=0\n"
" nvram set mysql_init_priv=0\n" " nvram commit\n"
" nvram commit\n" "}\n"
"fi\n" "REINIT_ROOT_PASSWD=$(nvram get mysql_init_rootpass)\n"
"REINIT_ROOT_PASSWD=`nvram get mysql_init_rootpass`\n" "[[ $REINIT_ROOT_PASSWD -eq 1 || $NEW_INSTALL -eq 1 ]] && {\n"
"if [[ $REINIT_ROOT_PASSWD -eq 1 || $NEW_INSTALL -eq 1 ]]; then\n" " echo \"=========mysqld skip-grant-tables==================\" >> $MYLOG\n"
" echo \"=========mysqld skip-grant-tables==================\" >> $MYLOG\n" " nohup $BINPATH/mysqld --skip-grant-tables --skip-networking --pid-file=$PID >> $MYLOG 2>&1 &\n"
" nohup $BINPATH/mysqld --skip-grant-tables --skip-networking --pid-file=$PID >> $MYLOG 2>&1 &\n" " sleep 2\n"
" sleep 2\n" " [ -f "MYSQL_PASSWD" ] && rm -f "MYSQL_PASSWD"\n"
" [ -f /tmp/setpasswd.sql ] && rm -f /tmp/setpasswd.sql\n" " echo \"use mysql;\" > "MYSQL_PASSWD"\n"
" echo \"use mysql;\" > /tmp/setpasswd.sql\n" " echo \"update user set password=password('$ROOTPASS') where user='root';\" >> "MYSQL_PASSWD"\n"
" echo \"update user set password=password('$ROOTPASS') where user='root';\" >> /tmp/setpasswd.sql\n" " echo \"flush privileges;\" >> "MYSQL_PASSWD"\n"
" echo \"flush privileges;\" >> /tmp/setpasswd.sql\n" " echo \"=========mysql < "MYSQL_PASSWD"====================\" >> $MYLOG\n"
" echo \"=========mysql < /tmp/setpasswd.sql====================\" >> $MYLOG\n" " $BINPATH/mysql < "MYSQL_PASSWD" >> $MYLOG 2>&1\n"
" $BINPATH/mysql < /tmp/setpasswd.sql >> $MYLOG 2>&1\n" " echo \"=========mysqldadmin shutdown====================\" >> $MYLOG\n"
" echo \"=========mysqldadmin shutdown====================\" >> $MYLOG\n" " $BINPATH/mysqladmin -uroot -p\"$ROOTPASS\" --shutdown_timeout=3 shutdown >> $MYLOG 2>&1\n"
" $BINPATH/mysqladmin -uroot -p\"$ROOTPASS\" --shutdown_timeout=3 shutdown >> $MYLOG 2>&1\n" " killall mysqld\n"
" killall mysqld\n" " rm -f $PID "MYSQL_PASSWD"\n"
" rm -f $PID /tmp/setpasswd.sql\n" " nvram set mysql_init_rootpass=0\n"
" nvram set mysql_init_rootpass=0\n" " nvram commit\n"
" nvram commit\n" " elog \"root password was already re-initialized\"\n"
" elog \"root password was already re-initialized.\"\n" "}\n\n"
"fi\n\n" "echo \"=========mysqld startup====================\" >> $MYLOG\n"
"echo \"=========mysqld startup====================\" >> $MYLOG\n" "nohup $BINPATH/mysqld --pid-file=$PID >> $MYLOG 2>&1 &\n"
"nohup $BINPATH/mysqld --pid-file=$PID >> $MYLOG 2>&1 &\n" "[ $ANYHOST -eq 1 ] && {\n"
"if [ $ANYHOST -eq 1 ]; then\n" " sleep 3\n"
" sleep 3\n" " [ -f "MYSQL_ANYHOST" ] && rm -f "MYSQL_ANYHOST"\n"
" [ -f /tmp/setanyhost.sql ] && rm -f /tmp/setanyhost.sql\n" " echo \"GRANT ALL PRIVILEGES ON *.* TO 'root'@'%%' WITH GRANT OPTION;\" >> "MYSQL_ANYHOST"\n"
" echo \"GRANT ALL PRIVILEGES ON *.* TO 'root'@'%%' WITH GRANT OPTION;\" >> /tmp/setanyhost.sql\n" " echo \"flush privileges;\" >> "MYSQL_ANYHOST"\n"
" echo \"flush privileges;\" >> /tmp/setanyhost.sql\n" " echo \"=========mysql < "MYSQL_ANYHOST"====================\" >> $MYLOG\n"
" echo \"=========mysql < /tmp/setanyhost.sql====================\" >> $MYLOG\n" " $BINPATH/mysql -uroot -p\"$ROOTPASS\" < "MYSQL_ANYHOST" >> $MYLOG 2>&1\n"
" $BINPATH/mysql -uroot -p\"$ROOTPASS\" < /tmp/setanyhost.sql >> $MYLOG 2>&1\n" "}\n"
"fi\n" "/usr/bin/mycheck addcru\n"
"/usr/bin/mycheck addcru\n" "elog \"MySQL successfully started\"\n"
"elog \"MySQL successfully started.\"\n" "mkdir -p $NGINX_DOCROOT\n"
"mkdir -p $NGINX_DOCROOT\n" "cp -p /www/adminer.php $NGINX_DOCROOT/\n",
"cp -p /www/adminer.php $NGINX_DOCROOT/\n", pbi,
pbi, nvram_safe_get("mysql_sleep"),
nvram_safe_get("mysql_sleep"), full_datadir,
full_datadir, full_datadir,
full_datadir, full_datadir,
full_datadir, full_tmpdir,
full_tmpdir, full_tmpdir,
full_tmpdir, full_tmpdir,
full_tmpdir, full_datadir);
full_datadir);
fclose( fp ); fclose( fp );
chmod("/tmp/start_mysql.sh", 0755); chmod(MYSL_START_SCRIPT, 0755);
xstart("/tmp/start_mysql.sh");
return;
xstart(MYSL_START_SCRIPT);
} }
void stop_mysql(void) void stop_mysql(void)
@ -265,36 +269,32 @@ void stop_mysql(void)
FILE *fp; FILE *fp;
char pbi[128]; char pbi[128];
if (nvram_match("mysql_binary", "internal")) { if (nvram_match("mysql_binary", "internal"))
strcpy(pbi,"/usr/bin"); strcpy(pbi, "/usr/bin");
} else if (nvram_match("mysql_binary", "optware"))
else if (nvram_match("mysql_binary", "optware")) { strcpy(pbi, "/opt/bin");
strcpy(pbi,"/opt/bin"); else
} strcpy(pbi, nvram_safe_get("mysql_binary_custom"));
else {
strcpy(pbi,nvram_safe_get("mysql_binary_custom"));
}
/* stop file */ /* stop script */
if (!(fp = fopen("/tmp/stop_mysql.sh", "w"))) { if (!(fp = fopen(MYSQL_STOP_SCRIPT, "w"))) {
syslog(LOG_ERR, "Can not open /tmp/stop_mysql.sh for writing."); perror(MYSQL_STOP_SCRIPT);
return; return;
} }
fprintf(fp, fprintf(fp, "#!/bin/sh\n\n"
"#!/bin/sh\n\n" "%s/mysqladmin -uroot -p\"%s\" --shutdown_timeout=3 shutdown\n"
"%s/mysqladmin -uroot -p\"%s\" --shutdown_timeout=3 shutdown\n" "killall mysqld\n"
"killall mysqld\n" "logger \"MySQL successfully stopped\" \n"
"logger \"MySQL successfully stopped\" \n" "sleep 1\n"
"sleep 1\n" "rm -f /var/run/mysql.pid\n"
"rm -f /var/run/mysql.pid\n" "/usr/bin/mycheck addcru\n",
"/usr/bin/mycheck addcru\n", pbi,
pbi, nvram_safe_get("mysql_passwd"));
nvram_safe_get("mysql_passwd"));
fclose(fp); fclose(fp);
chmod("/tmp/stop_mysql.sh", 0755); chmod(MYSQL_STOP_SCRIPT, 0755);
xstart("/tmp/stop_mysql.sh"); xstart(MYSQL_STOP_SCRIPT);
return;
} }

Loading…
Cancel
Save