1. 程式人生 > >Shell執行MySQL指令碼錯誤:Operation CREATE USER failed for 'user'@'%'

Shell執行MySQL指令碼錯誤:Operation CREATE USER failed for 'user'@'%'

在Docker裡面安裝的MySQL5.7,在編寫Shell指令碼執行時遇如題之BUG。

解決問題:

drop user 'user'@'%' ;

flush privileges;

create user 'user'@'%' identified by '123456';

可執行MySQLShell 指令碼示例:

#!/bin/bash
#file:docker_mysql_create_table.sh
#company:cvnavi.com
#author:Pengjunlin
echo "當前執行檔案......$0"
# Mysql資料庫相關配置
mysql_host="localhost"
mysql_port="3366"
mysql_database_name="filecache"
mysql_root_user_name="root"
mysql_root_user_pwd="root"
mysql_remote_user_name="rtvsweb"
mysql_remote_user_pwd="rtvs2018"
# 資料庫表名大寫與程式一致
mysql_table_name="AVINFO";
# 進入mysql控制檯 預設使用者是root
echo "Docker Mysql控制檯建立資料庫...."
# 為root使用者設定密碼
echo "Docker Mysql控制檯為root使用者設定密碼....$mysql_root_user_pwd"
sql_alter_user="ALTER USER '$mysql_root_user_name'@'$mysql_host' IDENTIFIED BY '$mysql_root_user_pwd'"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_alter_user"

#刪除可能重複的遠端使用者
echo "Docker Mysql控制檯刪除可能重複的遠端使用者....$mysql_remote_user_name"
sql_create_user="DROP USER '$mysql_remote_user_name'@'%' "
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_create_user"

# 重新整理資料庫許可權
echo "Docker Mysql重新整理使用者許可權...."
sql_flush_privileges="flush privileges"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_flush_privileges"

# 新增遠端登入使用者
echo "Docker Mysql控制檯建立遠端使用者....$mysql_remote_user_name"
sql_create_user="CREATE USER '$mysql_remote_user_name'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_remote_user_pwd'"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_create_user"

#為遠端賬號新增許可權
echo "Docker Mysql控制檯為遠端賬號新增許可權.... *.* TO '$mysql_remote_user_name'@'%'"
sql_grant_user="GRANT ALL PRIVILEGES ON *.* TO '$mysql_remote_user_name'@'%'"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_grant_user"

# 建立資料庫
echo "Docker Mysql控制檯建立資料庫.... $mysql_database_name"
sql_create_database="CREATE DATABASE IF NOT EXISTS $mysql_database_name"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_create_database"

# 重新整理資料庫許可權
echo "Docker Mysql重新整理使用者許可權...."
sql_flush_privileges="flush privileges"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_flush_privileges"

# 確定使用的資料庫
echo "Docker Mysql確定使用的資料庫....$mysql_database_name"
sql_select_use_db="USE $mysql_database_name"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -P$mysql_port -e"$sql_select_use_db"

#使用者建立Mysql資料庫指令碼
echo "Docker Mysql控制檯建立資料庫表.... $mysql_table_name"
sql_create_table="USE $mysql_database_name;CREATE TABLE IF NOT EXISTS $mysql_table_name (
  F_ID varchar(255) NOT NULL,
  F_SIM varchar(20) NOT NULL,
  F_CHANNEL int(11) NOT NULL,
  F_ALARM decimal(18,0) NOT NULL,
  F_STORAGE_TYPE int(11) NOT NULL,
  F_STREAM_TYPE int(11) NOT NULL,
  F_START_TIME decimal(20,0) NOT NULL,
  F_END_TIME decimal(20,0) NOT NULL,
  F_FILE_PATH varchar(255) NOT NULL,
  F_FILE_SIZE decimal(18,0) NOT NULL,
  F_DATA_TYPE int(11) default NULL,
  PRIMARY KEY (F_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8"
mysql -u$mysql_root_user_name -p$mysql_root_user_pwd  -P$mysql_port -e"$sql_create_table"