Centos7中安裝mysql5.7.21

1.mysql5.7.1下載:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar
將下載的包放在/tmp目錄下

2.進入/tmp,將mysql-5.7.27-linux-glibc2.12-x86_64.tar解壓到/usr目錄下

 tar zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar -C /usr
 #解壓後,生成/usr/mysql-5.7.27-linux-glibc2.12-x86_64,並重命名
 mv /usr/mysql-5.7.27-linux-glibc2.12-x86_64 /usr/mysql

3.創建mysql用戶組及用戶(非必須步驟)

groupadd mysql
useradd -r -g mysql mysql

4.配置環境變量

vim /etc/profile  #添加以下內容
export MYSQL_HOME=/usr/mysql
export PATH=$PATH:$MYSQL_HOME/bin
#保存,並執行
source /etc/profile

5.配置mysql文件

#刪除/etc/my.cnf,並新建一個
vim /etc/my.cnf #添加以下配置
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/mysql
datadir=/usr/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql/mysqld.log 
pid-file=/var/log/mysql/mysqld.pid  

lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = '+8:00'

注意:配置好後,需要先把/var/log/mysql/mysqld.log 和 /var/log/mysql/mysqld.pid兩個文件創建好(可以寫入個空格),並修改權限

echo "  " >> /var/log/mysql/mysqld.log
echo "  " >> /var/log/mysql/mysqld.pid
chmod -R 777 /var/log/mysql

6.初始化數據

/usr/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data --lc_messages_dir=/data/mysql/share --lc_messages=en_US

初始化後,在/var/log/mysql/mysqld.log中獲取初始密碼(密碼在最後一行,如果沒有,請注意是否有報錯信息)

7.加入開機啓動

#將/usr/mysql/support-files/mysql.server文件複製到/etc/init.d/mysql
`\cp -f /usr/mysql/support-files/mysql.server /etc/init.d/mysql`
#修改/etc/init.d/mysql文件("basedir="和"datadir="兩行(46/47)內容)
basedir=/usr/mysql
datadir=/usr/mysql/data
chmod 777 /etc/init.d/mysql
chkconfig --add mysql

8.啓動mysql,/usr/mysql/bin目錄下執行:

./mysqld_safe --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root &
#或者使用
systemctl start mysql

進入mysql:
用初始密碼進入mysql

mysql -uroot -p
初始密碼

重置密碼:

mysql> set password=password('123456');

更改訪問權限:

更改訪問權限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' with grant option;
Flush privileges;

創建數據庫:
create database mydb_test;

導入sql數據表文件:/tmp/db_test.sql,退出mysql,執行下面命令

mysql -uroot -p123456 mydb_test < /tmp/db_test.sql
安裝腳本:

sql_setup1.sh

#!/bin/bash

echo "install mysql"

#mysql安裝包
mysql_src="mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz"

#mysql安裝目錄
mysql_target="/usr"

if [ ! -d $mysql_target ];then 
mkdir -p $mysql_target 
fi

tar -zxvf $mysql_src -C $mysql_target
mv $mysql_target/mysql-5.7.27-linux-glibc2.12-x86_64 $mysql_target/mysql

echo "----creat /etc/my.cnf----"
#生成my.cnf文件
`echo " " >> my.cnf`
`echo "[client]" >> my.cnf`
`echo "port = 3306" >> my.cnf`
`echo "socket = /tmp/mysql.sock" >> my.cnf`
`echo " " >> my.cnf`
`echo "[mysqld]" >> my.cnf`
`echo "character_set_server=utf8" >> my.cnf`
`echo "init_connect='SET NAMES utf8'" >> my.cnf`
`echo "basedir=$mysql_target/mysql" >> my.cnf`
`echo "datadir=$mysql_target/mysql/data" >> my.cnf`
`echo "socket=/tmp/mysql.sock" >> my.cnf`
`echo "log-error=/var/log/mysql/mysqld.log" >> my.cnf`
`echo "pid-file=/var/log/mysql/mysqld.pid" >> my.cnf`
`echo " " >> my.cnf`
`echo "lower_case_table_names = 1" >> my.cnf`
`echo "sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
" >> my.cnf`
`echo "max_connections=5000" >> my.cnf`
`echo "default-time_zone = '+8:00' " >> my.cnf`

#將生成後的my.cnf文件覆蓋/etc/my.cnf(注意,此文件不能設置777權限)
`\cp -f my.cnf /etc/my.cnf`
`rm -rf my.cnf`

#創建/var/log/mysql/mysqld.log和/var/log/mysql/mysqld.pid文件,並修改權限
#注意這兩個文件不能直接放到/var/log路徑下,經測試此路徑權限修改後,重啓會失效
if [ ! -d "/var/log/mysql" ]; then
  mkdir -p /var/log/mysql
fi
echo " " >> /var/log/mysql/mysqld.log
echo " " >> /var/log/mysql/mysqld.pid
chmod -R 777 /var/log/mysql

#創建mysql用戶組及用戶
echo "----creat mysql group and user----"
#如果mysql用戶組不存在,就創建mysql用戶組
egrep "^mysql" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
    groupadd mysql
fi

#如果mysql用戶不存在,就創建mysql用戶
id mysql >& /dev/null
if [ $? -ne 0 ]
then
    useradd -r -g mysql mysql
fi


#添加到環境變量,有時候發現寫入到/etc/profile中,重啓shell窗口後,不生效,保險起見,可以在/etc/bashrc中寫入一份
echo "----Configure environment variables----"
#if [ -f /etc/bashrc ]; then 
#	`echo "export MYSQL_HOME=$mysql_target/mysql" >> /etc/bashrc`
#	`echo 'export PATH=$PATH:$MYSQL_HOME/bin' >> /etc/bashrc`
#	`source /etc/bashrc`
#fi

if [ -f /etc/profile ]; then 
	`echo "export MYSQL_HOME=$mysql_target/mysql" >> /etc/profile`
	`echo 'export PATH=$PATH:$MYSQL_HOME/bin' >> /etc/profile`
	`source /etc/profile`
fi

#加入開機啓動
`\cp -f $mysql_target/mysql/support-files/mysql.server /etc/init.d/mysql`
#修改/etc/init.d/mysql文件(查找替換"basedir="和"datadir="兩行(46/47)內容)
basedir=$mysql_target/mysql
datadir=$mysql_target/mysql/data
sed -i "46c basedir=$basedir" /etc/init.d/mysql 
#這裏直接替換了46行的內容,也可以通過查找替換的方式,具體參見sed用法
sed -i "47c datadir=$datadir" /etc/init.d/mysql
chmod 777 /etc/init.d/mysql
chkconfig --add mysql #已加入到開機啓動
#可以使用systemctl start/stop mysql啓動和關閉mysql服務

#mysql初始化,初始化後生成初始密碼
echo "----mysql initialization----"
$mysql_target/mysql/bin/mysqld --initialize --user=mysql --basedir=$mysql_target/mysql --datadir=$mysql_target/mysql/data --lc_messages_dir=$mysql_target/mysql/share --lc_messages=en_US

if [ $? -ne 0 ] 
then 
echo "----ERROR!!!----"
else 
#獲取初始密碼
sleep 5s #等待5s
passwd_line=`sed -n "/.*A temporary password is generated/p" /var/log/mysql/mysqld.log` #獲取到密碼所在的行
echo "$passwd_line" >> sqlpwd.log  
sql_pwd=`sed 's/.*A temporary password is generated for root@[^:]*: \(.*\)/\1/' sqlpwd.log`
#將提取到的密碼直接替換該行內容,這樣sql_pwd中就只是密碼字符串了,此操作沒有修改sqlpwd.log內容,如果想直接修改,可以使用:sed -i 's/.*A temporary password is generated for root@[^:]*: \(.*\)/\1/' sqlpwd.log
echo "mysql初始密碼爲: $sql_pwd"
rm -rf sqlpwd.log

#將初始密碼寫入/etc/my.cnf [client]配置中(位於文件第2行),後面實現免輸入賬號密碼登錄
#在第2行後面添加user和password配置
sed -i "2a user=root\npassword=$sql_pwd" /etc/my.cnf

#啓動mysql
echo "----start mysql----"
#$mysql_target/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root >/dev/null &
#上面命令可以啓動mysql,也可使用下面簡單方法
systemctl start mysql
fi

sql_setup2.sh

#!/bin/bash

echo "----set passwd----"
mysql_target="/usr"
#將mysql密碼修改爲:123456
$mysql_target/mysql/bin/mysql --connect-expired-password -e "set password=password('123456')"
#此操作可實現不用進入mysql交互模式進行操作
if [ $? -ne 0 ] 
then 
echo "----ERROR!!!----"
else 
#修改/etc/my.cnf中的密碼(密碼位於第4行),將新修改的密碼保存到配置文件中,後面實現免輸入賬號密碼登錄
sed -i "4c password=123456" /etc/my.cnf
#sed -n "4p" /etc/my.cnf #顯示修改後的密碼
$mysql_target/mysql/bin/mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' with grant option;Flush privileges"

echo "----create database mydb_test----"
#創建數據庫,並查詢是否存在剛纔新創建的數據庫
$mysql_target/mysql/bin/mysql -e "create database mydb_test;show databases;" 

echo "----import mydb_test data----" 
#導入備份的數據庫文件,文件位置位於/tmp/db_test.sql
$mysql_target/mysql/bin/mysql mydb_test < /tmp/db_test.sql
#導入數據後,查看庫中表,確認是否導入成功
$mysql_target/mysql/bin/mysql mydb_test  -e "show tables;"

echo "mysql install success"
fi
注意:以上兩部分代碼需先後手動執行才能生效,放一起執行時不知道爲什麼第二部分代碼不生效,原因暫時未知。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章