1. 程式人生 > >centos環境下Yum+rmp安裝MySQL8.0及5.7+Yum安裝MySQL8.0下修改其資料儲存目錄

centos環境下Yum+rmp安裝MySQL8.0及5.7+Yum安裝MySQL8.0下修改其資料儲存目錄

 

在centos上安裝mysql著實費了我一番功夫。一番探索後我成功的在4臺centos虛機上安裝上了mysql,其中三臺用yum的方式進行安裝,一臺用rpm的方式進行安裝。現做記錄如下:


0:檢查centos是否有安裝mysql和完全解除安裝mysql

  • 檢視MySQL是否安裝:
yum list installed mysql*

或者:
rpm -qa | grep -i mysql

 

  • 解除安裝mysql
yum remove mysql mysql-server mysql-libs compat-mysql51(你所安裝的mysql)
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /etc/profile.d/mysql.sh
rm -rf /etc/init.d/mysql
  • 檢視程序
檢視mysql程序
ps  -ef|grep mysql

殺死程序
kill -9 portNo


 

 

一:rpm方式安裝(5.7的先看完第四節再回來)

軟體下載:上mysql的官網下載對應的版本軟體;我下載的是mysql-8.0.12-linux-glibc2.12-x86_64.tar這個版本。

  1. 解壓到你預裝mysql的路徑:tar -xJvf mysql-8.0.12-linux-glibc2.12-x86_64.tar.xz -C  /opt/app
  2. 建目錄授權等 

    groupadd mysql
    useradd mysql
    mkdir -p /opt/dataSet/mysql #(建立一個用於存放資料的資料夾)
    chown -R mysql:mysql /opt/dataSet/mysql/
    chmod -R 775 /opt/dataSet/mysql/

     

  3. 配置檔案/etc/my.cnf如下
     
    [mysqld]
    server-id                      = 1
    port                           = 3306
    mysqlx_port                    = 33060
    mysqlx_socket                  = /tmp/mysqlx.sock
    basedir                        = /opt/app/mysql  #(我的軟體安裝在這裡)
    datadir                        = /opt/dataSet/mysql #(我的資料放在這個資料夾)
    socket                         = /tmp/mysql.sock
    pid-file                       = /tmp/mysqld.pid
    log-error                      = /opt/dataSet/mysql/error.log #(對應修改)
    slow-query-log                 = 1
    slow-query-log-file            = slow.log
    long_query_time                = 0.2
    log-bin                        = bin.log
    relay-log                      = relay.log
    binlog_format                 =ROW
    relay_log_recovery            = 1
    #character-set-client-handshake = FALSE
    character-set-server           = utf8mb4
    collation-server               = utf8mb4_unicode_ci
    init_connect                   ='SET NAMES utf8mb4'
    innodb_buffer_pool_size        = 1G
    join_buffer_size               = 128M
    sort_buffer_size               = 2M
    read_rnd_buffer_size           = 2M
    log_timestamps                 = SYSTEM
    lower_case_table_names         = 1
    default-authentication-plugin  =mysql_native_password #(設定為可遠端登入)
    
  4. 初始化資料庫:(注意目錄路徑)

    /opt/app/mysql/bin/mysqld --user=mysql --basedir=/opt/app/mysql --datadir=/opt/dataSet/mysql --initialize-insecure


    官方推薦使用--initialize,會在錯誤日誌中生成難以輸入的臨時密碼,我這裡使用的免密碼的方式
     

    cat /opt/dataSet/mysql/error.log | grep -i password
    
    

     

  5. 設定啟動檔案和環境變數:

    cp -arp /opt/app/mysql/support-files/mysql.server  /etc/init.d/mysql

     

  6. --啟動資料庫:
     

    /etc/init.d/mysql start
    
    
    vim /etc/profile.d/mysql.sh
    //寫入下面這條語句
    export PATH=$PATH:/opt/app/mysql/bin
    
    cat /etc/profile.d/mysql.sh
    
    export PATH=$PATH:/opt/app/mysql/bin

    使得環境變數生效:

    source /etc/profile.d/mysql.sh

     

  7. 安裝完畢,檢視mysql版本資訊:

    mysqld --version

     

  8. 登入mysql
    /opt/app/mysql/bin/mysql -p -S /tmp/mysql.sock
    或者:
    mysql -uroot -p 



  9. 設定navicat可遠端登入(以下操作皆在mysql中)

    在設定之前先把免密登入mysql改成自己設定的密碼。
    下面設定為“123456”
    set global validate_password.policy=0;
    set global validate_password.length=1;
    //上述指令是為了可以設定123456這種簡單密碼
    alter user user() identified by '123456';
    

    設定遠端連線(5.7的跳到第四章)

    use mysql;
    alter user 'root'@'localhost' identified with mysql_native_password by '123456';
    flush privileges;
    update user set host='%' where user='root';//任意ip都可以連
    update user set host='your ip' where user='root'; //指定ip
    flush privileges;
    
    //取消許可權,僅供參考
    use mysql;
    update user set host ='localhost' where user ='root' and host ='%' 
    flush privileges;

     

  10. 安裝成功連線成功:

  11. 設定mysql快捷登入
     

    vim .bashrc
    

    在檔案中新增

    alias mysql='mysql -uroot -p123456'
    

    使配置檔案生效
     

    source .bashrc
    

    這樣就可以直接在指令行中打mysql登入了

 


二:yum方式安裝

找了許久,發現照著部落格能成功安裝的有yum 連線

對於一般的人照著上面那個部落格也夠用了,但是因為上述yum安裝,資料的儲存路徑預設為/var/lib/mysql。可是我所用的虛機磁碟主要掛在/opt路徑,考慮到以後會在mysql中儲存大量的資料,所以經過一番不易的探索,把mysql的資料儲存路徑換在了/opt/dataSet路徑。具體步驟如下所示:

  1. 把/var/lib/mysql 整個目錄複製到/opt/dataSet(把/var/lib/mysql整個目錄保持許可權複製到/opt/dataSet)
    cp  -arp /var/lib/mysql /opt/dataSet/ 

     

  2. 修改配置檔案 my.cnf
    datadir=/opt/dataSet/mysql #(新的資料儲存路徑)
    socket=/opt/dataSet/mysql/mysql.sock #(#修改socket引數)
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    default_authentication_plugin=mysql_native_password
    

     

  3. 修改MySQL啟動指令碼/etc/init.d/mysql
     

    datadir = /opt/dataSet/mysql
    
    ln -s /opt/dataSet/mysql/mysql.sock  /var/lib/mysql/mysql.sock
    

     

  4. 做一個mysql.sock 連結:

    ln -sf /opt/dataSet/mysql/mysql.sock  /var/lib/mysql/mysql.sock


     

  5. 檢查相關目錄的屬主和許可權。
     

    chown -R mysql:mysql /opt/dataSet/mysql/

     

  6. 重啟mysql
     

    /etc/init.d/mysql start
    或者
    service mysqld start
    

     

三、使用過程中出現的問題:

1、不知道是不是記錯密碼,反正就是登入不進去。


解決辦法見部落格修改密碼mysql8版本修改密碼不成功的看這裡

 

四、mysql5.7 rmp安裝

步驟都一樣,這裡給一下不一樣的地方主要是配置檔案(目錄需要相應更改)以及一個軟連線。

groupadd mysql
useradd mysql
mkdir -p /opt/dataSet/mysqldata #(建立一個用於存放資料的資料夾)
mkdir -p /opt/dataSet/mysqldata/data
mkdir -p /opt/dataSet/mysqldata/log
mkdir -p /opt/dataSet/mysqldata/tmp

chown -R mysql:mysql /opt/dataSet/mysqldata
//為確保無誤,下列檔案也給授權
chown -R mysql:mysql /opt/dataSet/mysqldata/data
chown -R mysql:mysql /opt/dataSet/mysqldata/log
chown -R mysql:mysql /opt/dataSet/mysqldata/tmp

chmod -R 775 /opt/dataSet/mysqldata/data
chmod -R 775 /opt/dataSet/mysql/log
chmod -R 775 /opt/dataSet/mysql/tmp

不一樣1:vim  /etc/my.cnf:

[mysqld]                                        # 服務端基本設定
# 基礎設定
server-id = 1                                  # Mysql服務的唯一編號 每個mysql服務Id需唯一
port = 3306                                    # MySQL監聽埠
basedir = /opt/app/mysql                      # MySQL安裝根目錄
datadir = /opt/dataSet/mysqldata/data                     # MySQL資料檔案所在位置
tmpdir  = /opt/dataSet/mysqldata/tmp                                  # 臨時目錄,比如load data infile會用到
socket = /opt/dataSet/mysqldata/tmp/mysql.sock        # 為MySQL客戶端程式和伺服器之間的本地通訊指定一個套接字檔案
pid-file = /opt/dataSet/mysqldata/tmp/mysql.pid      # pid檔案所在目錄
skip_name_resolve = 1                          # 只能用IP地址檢查客戶端的登入,不用主機名
character-set-server = utf8mb4                  # 資料庫預設字符集,主流字符集支援一些特殊表情符號(特殊表情符佔用4個位元組)
transaction_isolation = READ-COMMITTED          # 事務隔離級別,預設為可重複讀,MySQL預設可重複讀級別
collation-server = utf8mb4_general_ci          # 資料庫字符集對應一些排序等規則,注意要和character-set-server對應
init_connect='SET NAMES utf8mb4'                # 設定client連線mysql時的字符集,防止亂碼
lower_case_table_names = 1                      # 是否對sql語句大小寫敏感,1表示不敏感
max_connections = 400                          # 最大連線數
max_connect_errors = 1000                      # 最大錯誤連線數
explicit_defaults_for_timestamp = true          # TIMESTAMP如果沒有顯示宣告NOT NULL,允許NULL值
max_allowed_packet = 128M                      # SQL資料包傳送的大小,如果有BLOB物件建議修改成1G
interactive_timeout = 1800                      # MySQL連線閒置超過一定時間後(單位:秒)將會被強行關閉
wait_timeout = 1800                            # MySQL預設的wait_timeout值為8個小時, interactive_timeout引數需要同時配置才能生效
tmp_table_size = 16M                            # 內部記憶體臨時表的最大值 ,設定成128M;比如大資料量的group by ,order by時可能用到臨時表;超過了這個值將寫入磁碟,系統IO壓力增大
max_heap_table_size = 128M                      # 定義了使用者可以建立的記憶體表(memory table)的大小
query_cache_size = 0                            # 禁用mysql的快取查詢結果集功能;後期根據業務情況測試決定是否開啟;大部分情況下關閉下面兩項
query_cache_type = 0
default-authentication-plugin  =mysql_native_password #(設定為可遠端登入)

# 使用者程序分配到的記憶體設定,每個session將會分配引數設定的記憶體大小
read_buffer_size = 2M                          # MySQL讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL會為它分配一段記憶體緩衝區。
read_rnd_buffer_size = 8M                      # MySQL的隨機讀緩衝區大小
sort_buffer_size = 8M                          # MySQL執行排序使用的緩衝大小
binlog_cache_size = 1M                          # 一個事務,在沒有提交的時候,產生的日誌,記錄到Cache中;等到事務提交需要提交的時候,則把日誌持久化到磁碟。預設binlog_cache_size大小32K

back_log = 130                                  # 在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆疊中;官方建議back_log = 50 + (max_connections / 5),封頂數為900

# 日誌設定
log_error = /opt/dataSet/mysqldata/log/error.log                          # 資料庫錯誤日誌檔案
slow_query_log = 1                              # 慢查詢sql日誌設定
long_query_time = 1                            # 慢查詢時間;超過1秒則為慢查詢
slow_query_log_file = /opt/dataSet/mysqldata/log/slow.log                  # 慢查詢日誌檔案
log_queries_not_using_indexes = 1              # 檢查未使用到索引的sql
log_throttle_queries_not_using_indexes = 5      # 用來表示每分鐘允許記錄到slow log的且未使用索引的SQL語句次數。該值預設為0,表示沒有限制
min_examined_row_limit = 100                    # 檢索的行數必須達到此值才可被記為慢查詢,查詢檢查返回少於該引數指定行的SQL不被記錄到慢查詢日誌
expire_logs_days = 5                            # MySQL binlog日誌檔案儲存的過期時間,過期後自動刪除

# 主從複製設定
log-bin = mysql-bin                            # 開啟mysql binlog功能
binlog_format = ROW                            # binlog記錄內容的方式,記錄被操作的每一行
binlog_row_image = minimal                      # 對於binlog_format = ROW模式時,減少記錄日誌的內容,只記錄受影響的列

# Innodb設定
innodb_open_files = 500                        # 限制Innodb能開啟的表的資料,如果庫裡的表特別多的情況,請增加這個。這個值預設是300
innodb_buffer_pool_size = 64M                  # InnoDB使用一個緩衝池來儲存索引和原始資料,一般設定物理儲存的60% ~ 70%;這裡你設定越大,你在存取表裡面數據時所需要的磁碟I/O越少
innodb_log_buffer_size = 2M                    # 此引數確定寫日誌檔案所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會丟失資料。MySQL開發人員建議設定為1-8M之間
innodb_flush_method = O_DIRECT                  # O_DIRECT減少作業系統級別VFS的快取和Innodb本身的buffer快取之間的衝突
innodb_write_io_threads = 4                    # CPU多核處理能力設定,根據讀,寫比例進行調整
innodb_read_io_threads = 4

 

不一樣2:

修改了scok的配置檔案路徑,這裡給一個軟連線。注:在啟動mysql之後給(重啟後亦有效)

ln -s /opt/dataSet/mysqldata/tmp/mysql.scok  /tmp/mysql.scok  #(路徑自己做相應更改)

 

  • 給多個ip授權登入mysql5.7(8.0的沒有找到方法),記得給本就也授權,以防無失。
     

    use mysql;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'you ip' IDENTIFIED BY 'you password' WITH GRANT OPTION;
    
    flush privileges;
    
    drop user 'root'@'youip';//刪除ip

    需要給幾個ip就授權幾次。



五、安裝參考部落格

參考部落格:rmp安裝yum安裝更換mysql資料儲存路徑1更換mysql資料儲存路徑2 解決linux mysql命令 bash: mysql: command not found 的方法