linux安裝mysql5.7.30 及配置多實例


1. 安裝包下載,准備環境

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

# 創建以下目錄,(目錄位置自定義,無強制) 軟件路徑: /opt/mysql/ 數據路徑: /data/mysql/data/ 二進制路徑:/data/mysql/binlog/ 通訊路徑: /tmp/mysql/ 用來在數據庫啟動的時候在該目錄生成sock文件 chown -R mysql.mysql /opt/mysql chown -R mysql.mysql /tmp/mysql chown -R mysql.mysql /data/*

centos7上安裝mysql之前,先把系統自帶的mariadb卸載掉
yum remove mariadb-libs

2. 解壓二進制包,配置環境變量

tar zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.30-linux-glibc2.12-x86_64/* /opt/mysql/

  vim /etc/profile
  export PATH=/opt/mysql/bin:$PATH
  source /etc/profile

3. 數據庫初始化

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql/data
參數:
--initialize-insecure 不使用mysql的密碼策略,無臨時密碼
--user    指定用戶
--basedir 指定軟件路徑
--datadir 指定數據路徑
初始化操作會在指定的數據目錄下生成mysql系統的依賴文件

4. 配置文件

vim /etc/my.cnf  # mysql會自動加載該目錄下的配置文件
[mysqld] basedir
=/opt/mysql datadir=/data/mysql/data server_id=10 user=mysql log_bin=/data/mysql/binlog/mysql-bin # mysql-bin是指定的二進制文件前綴 binlog_format=row            # 配置binlog以RBR模式記錄 socket=/tmp/mysql/mysql.sock # 會在數據庫啟動的時候在該目錄生成sock文件,關閉數據庫后即消失

  [client]
  socket=/tmp/mysql/mysql.sock

4.1 mysql啟動時都會去哪些路徑找配置文件呢?

# 可以在mysqld的幫助信息中找到相關說明,如下
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 注: 默認情況下,MySQL啟動時,會依次讀取以上配置文件,如果有重復選項,會以最后一個文件設置的為准。 但是,如果啟動時加入了--defaults-file=xxxx時,以上的所有文件都不會讀取.

5. 數據庫啟動

1. 啟動方式一
使用mysql軟件目錄下support-files/mysql.server 即可啟停,就是有些麻煩
/opt/mysql/support-files/mysql.server start/stop

2. 啟動方式二
使用mysql軟件目錄/bin/mysql_safe來啟動
啟動:mysql_safe &
停止:mysqladmin -uroot -p shutdown

3. 啟動方式三
使用mysql軟件目錄/bin/mysqld來啟動
啟動:/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    該方式會把啟動日志輸出到屏幕,適用於數據庫異常時,連日志都寫入不了的場景。

4. mysql的維護模式
mysql_safe --skip-grant-tables --skip-networking &

5. 使用sys-v方式。
cp support-files/mysql.server /etc/init.d/mysqldd
啟動/停止: service mysqldd start/stop 或者 /etc/init.d/mysqldd start/stop

6. 使用systemctl方式。
cat /etc/systemd/system/mysqld.service  創建個mysqld.service文件

  [Unit]
  Description=MySQL Server
  Documentation=man:mysqld(8)
  Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
  After=network.target
  After=syslog.target
  [Install]
  WantedBy=multi-user.target
  [Service]
  User=mysql
  Group=mysql
  LimitNOFILE = 10000
  ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf         # 修改這里,其它都是固定的

  配置完成即可使用:systemctl start/stop mysqld

5.1 各啟動方式對比

1. sys-v方式只能實現簡單的start, stop, restart操作,不能在命令行添加參數

  該方式的調用過程: 這個腳本會調用軟件目錄下的bin/mysql_safe, 然后會調用bin/mysqld來完成。

2. systemctl方式也只能實現簡單的啟停操作。

  該方式的調用過程: 直接使用軟件目錄下bin/mysqld + 指定配置文件來啟動的。

3. 維護模式的啟停

  mysql_safe --skip-grant-tables --skip-networking &  可使用命令行參數的形式啟動,能處理特殊模式的啟動操作

  該方式雖然也會加載/etc/my.cnf配置文件,但是如果命令行中有和配置文件中同樣的參數,會以命令行的為准。

 

 補充:1,2,3都會去加載/etc/my.cnf配置文件的內容,但是3更靈活,能在命令行中加入需要的參數來改變啟動模式

5.2 啟動后配置遠程登陸

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root'
flush privileges;

 

 6. 初始化時使用的是無密碼初始化

數據庫啟動后可使用mysql提供的mysqladmin來設置管理員密碼或修改管理員密碼(root)
/opt/mysql/bin/mysqladmin -uroot -p password 密碼
當然加了環境變量后可直接使用: mysqladmin -uroot -p password 密碼
mysqladmin命令設置密碼和修改密碼命令一樣,只不過用來修改密碼時第一次需要數據老密碼。

7. 管理員密碼忘記了?

跳過授權表,禁用遠程模式啟動后,使用原來的grant或alter命令來修改密碼肯定不行,因為我們啟動的模式說白了就是不加載授權表,肯定也不能對授權表進行操作了。
此時可使用flush privileges;來重新加載授權表, 然后再使用grant或alter命令來設定密碼即可。
授權表即mysql庫中的user表

 

8. 配置mysql多實例

8.1 准備多個目錄

mkdir -p /data/330{7,8,9}/{data,binlog}

8.2 准備配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql/
datadir=/data/3307/data/
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/binlog/mysql-bin
binlog_format=row
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql/
datadir=/data/3308/data/
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/binlog/mysql-bin
binlog_format=row
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql/
datadir=/data/3309/data/
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/binlog/mysql-bin
binlog_format=row
EOF

8.3 初始化三套數據

cp /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/opt/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/opt/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/opt/mysql

8.4 systemd管理多實例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service

vim mysqld3307.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/3309/my.cnf

8.5 授權並啟動服務

chown -R mysql.mysql /data/*

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

8.6 驗證多實例

netstat -lnp|grep 330
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"

8.7 多實例總結:

1. 多實例的原理:

  定義多個數據目錄和多個配置文件,初始化時使用同一個軟件,但是數據目錄不同,會在指定的不同目錄下分別生成mysql依賴的系統文件。

  配置使用systemctl來管理各實例時,本質是給軟件目錄/bin/mysqld指定了不同的my.cnf配置文件。這就使得在啟動不同實例時會加載不同的配置文件。

2. 多實例的連接:

  mysql server的連接有兩種方式:

    1. tcp/ip的連接,即: mysql -uroot -p -h127.0.0.1 -P3306

    2. 本地socket連接,即:mysql -S /socket文件的路徑。(只能在本機使用)

  本機啟動了多個實例,每個實例的socket文件地址都不一樣,可以使用socket方式連接對應的實例。也可使用指定端口的方式去連接不同的實例。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM