Linux下安裝mysql教程


Linux下安裝mysql

  1. 到mysql官網下載mysql編譯好的二進制安裝包,在下載頁面Select Platform:選項選擇linux-generic,然后把頁面拉到底部,64位系統下載Linux - Generic (glibc 2.5) (x86, 64-bit),32位系統下載Linux - Generic (glibc 2.5) (x86, 32-bit)

     

     

    安裝前准備:

     1.先檢查Linux中是否存在mysql  rpm -qa|grep mysql

     2:如果存在,請先執行卸載命令:rpm -e --nodeps  mysql-libs   --nodeps代表:可能其他地方有依賴mysql,這里強制卸載

     3:檢查 /tmp文件夾權限,由於mysql安裝過程中,會通過mysql用戶在/tmp目錄下新建tmp_db文件,所以請給/tmp較大的權限

        chmod -R 777 /tmp

     4:檢查各個mysql文件夾是否刪除干凈

    find / -name mysql

    結果如下:

    /var/lib/mysql

    /usr/local/mysql

    /usr/lib/mysql

    /usr/include/mysql

    命令刪除:

    rm -fr /usr/lib/mysql

    rm -fr /usr/include/mysql

    注意:卸載后/var/lib/mysql中的數據及/etc/my.cnf不會刪除,如果確定沒用后就手工刪除

    rm -f /etc/my.cnf

    rm -fr /var/lib/mysql

    刪除mysql用戶及用戶組

     userdel mysql

     groupdel mysql

     

    MySQL正式安裝和相關設置(這里以mysql8.0.11為例)

    1:上傳壓縮包到linux

    解壓壓縮包:

    tar -zxvf mysql-8.0.11-linux-glibc2.12-i686.tar.gz 

    # 移動解壓后的文件夾至/usr/local

    mv /usr/local/src/mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/

    # 重命名

    mv ./mysql-8.0.11-linux-glibc2.12-x86_64 mysql-8.0

    # 創建文件夾data,存儲文件;

    cd /usr/local/mysql-8.0/
    mkdir ./data

    2 創建用戶及用戶組

    # 用戶組
    groupadd mysql
    # 用戶 (用戶名/密碼)
    useradd -g mysql mysql

    3、授權

    chown -R mysql.mysql /usr/local/mysql-8.0/ # 親測
    或
    chown -R mysql .
    chgrp -R mysql .

    4 初始化數據庫

    # 查看當前所在目錄
    pwd # 若顯示/usr/local/mysql-8.0,請繼續執行,否則請先進入此目錄/usr/local/mysql-8.0
    # 初始化 注意查看是否存在相關目錄,若不存在,請新建
    ./bin/mysqld --user=mysql --basedir=/usr/local/mysql-8.0/ --datadir=/usr/local/mysql-8.0/data/ --initialize ; # 親測
    或 
    ./bin/mysql --user=mysql --basedir=/usr/local/mysql-8.0/ --datadir=/usr/local/mysql-8.0/data/ --initialize ;

    生成的臨時密碼:

     

    5 Mysql配置

    以下按需配置:

    vi /etc/my.cnf
    [client] port = 3306 socket = /tmp/mysql.sock
    [mysqld] #Mysql服務的唯一編號 每個mysql服務Id需唯一 server
    -id = 1 #服務端口號 默認3306 port = 3306 #mysql安裝根目錄 basedir = /usr/local/mysql #mysql數據文件所在位置 datadir = /usr/local/mysql/data #pid pid-file = /usr/local/mysql/mysql.pid #設置socke文件所在目錄 socket = /tmp/mysql.sock #設置臨時目錄 tmpdir = /tmp # 用戶 user = mysql # 允許訪問的IP網段 bind-address = 0.0.0.0 # 跳過密碼登錄 #skip-grant-tables #主要用於MyISAM存儲引擎,如果多台服務器連接一個數據庫則建議注釋下面內容 skip-external-locking #只能用IP地址檢查客戶端的登錄,不用主機名 skip_name_resolve = 1 #事務隔離級別,默認為可重復讀,mysql默認可重復讀級別(此級別下可能參數很多間隙鎖,影響性能) transaction_isolation = READ-COMMITTED #數據庫默認字符集,主流字符集支持一些特殊表情符號(特殊表情符占用4個字節) character-set-server = utf8mb4 #數據庫字符集對應一些排序等規則,注意要和character-set-server對應 collation-server = utf8mb4_general_ci #設置client連接mysql時的字符集,防止亂碼 init_connect='SET NAMES utf8mb4' #是否對sql語句大小寫敏感,1表示不敏感 lower_case_table_names = 1 #最大連接數 max_connections = 400 #最大錯誤連接數 max_connect_errors = 1000 #TIMESTAMP如果沒有顯示聲明NOT NULL,允許NULL值 explicit_defaults_for_timestamp = true #SQL數據包發送的大小,如果有BLOB對象建議修改成1G max_allowed_packet = 128M #MySQL連接閑置超過一定時間后(單位:秒)將會被強行關閉 #MySQL默認的wait_timeout 值為8個小時, interactive_timeout參數需要同時配置才能生效 interactive_timeout = 1800 wait_timeout = 1800 #內部內存臨時表的最大值 ,設置成128M。 #比如大數據量的group by ,order by時可能用到臨時表, #超過了這個值將寫入磁盤,系統IO壓力增大 tmp_table_size = 134217728 max_heap_table_size = 134217728 #禁用mysql的緩存查詢結果集功能 #后期根據業務情況測試決定是否開啟 #大部分情況下關閉下面兩項 query_cache_size = 0 query_cache_type = 0 #數據庫錯誤日志文件 log_error = error.log #慢查詢sql日志設置 slow_query_log = 1 slow_query_log_file = slow.log #檢查未使用到索引的sql log_queries_not_using_indexes = 1 #針對log_queries_not_using_indexes開啟后,記錄慢sql的頻次、每分鍾記錄的條數 log_throttle_queries_not_using_indexes = 5 #作為從庫時生效,從庫復制中如何有慢sql也將被記錄 log_slow_slave_statements = 1 #慢查詢執行的秒數,必須達到此值可被記錄 long_query_time = 8 #檢索的行數必須達到此值才可被記為慢查詢 min_examined_row_limit = 100 #mysql binlog日志文件保存的過期時間,過期后自動刪除 expire_logs_days = 5

     

      建立MySQL服務

    # 添加Mysql到系統服務
    cd /usr/local/mysql-8.0
    cp -a ./support-files/mysql.server /etc/init.d/mysql # 若mysqld,以下mysql相應的修改mysqld,如下圖所示
    chmod +x /etc/init.d/mysql 
    chkconfig --add mysql
    # 檢查服務是否生效  
    chkconfig --list mysql

     

     啟動Mysql服務

    # 啟動
    service mysql start;
    # 查看啟動狀態
    service mysql status;

     

    系統默認會查找/usr/bin下的命令,如果這個命令不在這個目錄下,會找不到mysql的相關命令,我們需要做的就是映射一個鏈接到/usr/bin目錄下,相當於建立一個鏈接文件 

    首先得知道mysql命令或mysqladmin命令的完整路徑,比如mysql的路徑是:/usr/local/mysql-8.0/bin/mysql,我們則可以這樣執行命令: # ln -s /usr/local/mysql-8.0/bin/mysql /usr/bin

     

    修改root密碼

    # 進入mysql
    mysql -uroot -p
    輸入初始密碼
    # 如果想要所有主機都可訪問,把localhost改成% alter user 'root'@'localhost' identified with mysql_native_password by '123456'; # 刷新 flush privileges;

     

    開放3306端口:

    讓外網能夠訪問mysql

        a.配置防火牆:  firewall-cmd --zone=public --add-port=3306/tcp --permanent(開放3306端口)

                 systemctl restart firewalld(重啟防火牆以使配置即時生效)

         查看系統所有開放的端口:firewall-cmd --zone=public --list-ports

     

    常用的mysql操作命令:

    1:新建mysql用戶: 登錄mysql mysql -u root -p 輸入密碼  CREATE USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qwe123'; 注意:此處的"localhost",是指該用戶只能在本地登錄,不能在另外一台機器上遠程登錄。如果想遠程登錄的話,將"localhost"改為"%",表示在任何一台電腦上都可以登錄。也可以指定某台機器可以遠程登錄。如果需要限定IP訪問,可以修改localhost-->指定IP地址。 如果還需要設置到另一個ip, 那么就需要重復上面的步驟: CREATE USER 'test'@'129.xxx.xxx.xx' IDENTIFIED WITH mysql_native_password BY 'qwe123'; 2. 為用戶授權 這里直接賦所有的權限 GRANT ALL PRIVILEGES ON *.* TO 'test'@'139.xxx.xxx.xx' 如果需要指定權限,就將ALL改為SELECT DELETE UPDATE INSERT等四種權限任選即可
    grant insert,select,update on test01.* to 'mayiic_dev'@'%';
    flush privileges; //刷新系統權限表 
    3、刪除指定的用戶:
    drop user
    'test'@'106.xxx.xx.xx';
    4、 查詢用戶和權限
    use mysql;
    select Host,User from user where user
    ='root';
    show grants for root;
    1、 顯示數據庫列表。 show databases; 2、 顯示庫中的數據表: # 指定數據庫 use mysql; #顯示指定庫中的表 show tables; 3、 顯示數據表的結構: describe 表名; 4、 建庫與刪庫: create database 庫名; drop database 庫名;

     

    MySQL8.0 忘記 root 密碼下如何修改密碼?

    1、vim /etc/my.cnf,添加 skip-grant-table(跳過權限驗證)

     

 
 二:開啟mysql binlog 日志記錄
 

    binlog日志,即binary log,是二進制日志文件。它有兩個作用,一是增量備份,即只備份新增的內容;二是用於主從復制等,即主節點維護了一個binlog日志文件,從節點從binlog中同步數據。我們可以通過binlog日志恢復數據。下面就介紹一下開啟MySQL binlog日志的過程:

1、登錄MySQL,查看binlog日志的狀態
 登錄MySQL后,輸入  show variables like '%log_bin%';查看到binlog日志為OFF關閉狀態;

 

 

2、開啟MySQL binlog日志

使用vi編輯器修改MySQL的my.cnf配置文件
vi /etc/my.cnf
server_id=2
 #log日志文件存放位置
log_bin = /var/bin/mysql/mysql-bin
 
binlog_format = ROW
 
expire_logs_days = 30

 

 

 注意:每次服務器(數據庫)重啟,服務器會調用flush logs;,新創建一個binlog日志

進入上面配置的日志存儲位置查看日志:
cd  /var/bin/mysql/mysql-bin

 

 數據恢復語法:

恢復語法 恢復命令的語法格式: mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼 數據庫名 常用參數選項解釋: --start-position=780 起始pos點 --stop-position=904 結束pos點 --start-datetime="2019-3-27 12:04:08" 起始時間點 --stop-datetime="2019-3-27 12:49:46" 結束時間點 --database=my_test 指定只恢復my_test數據庫(一台主機上往往有多個數據庫,只限本地log日志) !!!!Ubuntu我沒用熟悉吧 牢記 在mysqlbinlog和mysq前面都要加上sudo!!!! For example 指定pos結束點恢復(部分恢復) 恢復到780節點 sudo mysqlbinlog mysql-bin.000002 --stop-position 780 | sudo mysql -uroot -p my_test

binlog 日志文件轉sql

 進入mysql 的安裝目錄bin 目錄執行----》mysql-bin.000011的文件路徑

mysqlbinlog  --base64-output=decode-rows -v  mysql-bin.000011 -d db1  > db1.sql      //將row格式的binlog日志文件base64解析后轉入文件,-v代表換行展示

 

mysqlbinlog  --start-date="2017-08-12 15:00:19" --stop-date="2017-08-12 15:30:19"  mysql-bin.000011 -d db1  > db1.sql      //選擇時間范圍導出

 

執行sql語句時報錯: 

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona

解決:

SELECT @@sql_mode; 查詢出來的值為: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 修改mysql的配置文件: vim /etc/my.cnf 加入上面查詢出來的內容,去掉ONLY_FULL_GROUP_BY eg: sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

 然后重啟mysql解決:

service mysql restart

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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