MySQL二進位安裝

來源:互聯網
上載者:User

標籤:重新整理   col   hang   記憶體   pool   end   sql   buffer   login   

MySQL二進位安裝文檔

2018/3/16 18:35:49
[email protected]
https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

[TOC]

0、安裝簡略步驟
  • 安裝包10.162.73.61:/data/software
  • tar -xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
  • mv mysql-5.6.36-linux-glibc2.5-x86_64/ /data/mysql
  • 上傳my.cnf,建立my.cnf中的目錄
  • cd $basedir,初始化
    • ./scripts/mysql_install_db --defaults-file=/etc/my36.cnf --user=mysql #5.6
    • ./bin/mysqld --defaults-file=/etc/my38.cnf --initialize-insecure --user=mysql # 5.7
  • 修改許可權
    • shell> chown mysql:mysql $basedir
    • shell> chown mysql:mysql $datadir
    • shell> chmod 750 mysql-files
  • 啟動資料庫
    • numactl --interleave=all /data/mysql3308/bin/mysqld_safe --defaults-file=/etc/my_frontweb_snap.cnf --ledir=/data/mysql3308/bin/ & #5.6
    • numactl --interleave=all /data/mysql3308/bin/mysqld_safe --defualts-file=/etc/my.cnf & #5.7
  • 安全性改裝
    • ./mysql_secure_installation -S /data/mysql3307/data/mysql.sock
  • 設定path變數
    • vim /etc/profile
    • . /etc/profile
1、配置安裝環境1.1 磁碟規劃

最好將系統硬碟和MySQL分開:

  • 系統硬碟是500G的raid1
  • 獨立掛載SSD盤格式化掛載作為MySQLbasedir和datadir
1.2 配置網路環境
vim /etc/sysconfig/network-scripts/ifcfg-eth0vim /etc/sysconfig/networkvim /etc/hosts                //加入127.0.0.1和主機名稱的映射
1.3 執行初始化指令碼
vim mysql_install_init.shbash ./mysql_insall_init.sh

指令碼內容

modify_para(){limit_cn=`cat /etc/security/limits.conf |grep -i ‘modify by initsys‘|wc|awk ‘{print $1}‘`if [ $limit_cn -eq 0 ] then    echo -e "\n###### modify by initsys ######" >> /etc/security/limits.conf    echo "*        soft    nproc  1024000" >>  /etc/security/limits.conf    echo "*        hard    nproc  1024000" >>  /etc/security/limits.conf    echo "*        soft    nofile 1024000" >>  /etc/security/limits.conf    echo "*        hard    nofile 1024000" >>  /etc/security/limits.conf    echo -e "\nmysql        soft    nproc  1024000" >>  /etc/security/limits.conf    echo "mysql        hard  nproc  1024000" >>  /etc/security/limits.conf    echo "mysql        soft    nofile  1024000" >>  /etc/security/limits.conf    echo "mysql        hard  nofile  1024000" >>  /etc/security/limits.conffisysctl_cn=`cat /etc/sysctl.conf |grep ‘modify by initsys‘|wc|awk ‘{print $1}‘`if [ $sysctl_cn -eq 0 ]then    echo -e "\n###### modify by initsys ######" >> /etc/sysctl.conf    echo fs.aio-max-nr = 1048576 >> /etc/sysctl.conf    echo fs.file-max = 6815744 >> /etc/sysctl.conf    echo vm.swappiness = 10 >> /etc/sysctl.conf    echo net.core.rmem_max = 4194304 >> /etc/sysctl.conf    echo net.core.wmem_default = 262144 >> /etc/sysctl.conf    echo net.core.wmem_max = 1048586 >> /etc/sysctl.conf    echo kernel.msgmnb = 65536 >> /etc/sysctl.conf    echo kernel.msgmax = 655360 >> /etc/sysctl.conf    echo kernel.sem = 250 32000 100 142 >> /etc/sysctl.conf    echo kernel.shmmni = 4096 >> /etc/sysctl.conf    echo kernel.shmall = 1073741824 >> /etc/sysctl.conf    echo kernel.shmmax = 4398046511104 >> /etc/sysctl.conf    echo net.ipv4.ip_local_port_range = 5000 65500 >> /etc/sysctl.conf    echo net.core.rmem_default = 262144 >> /etc/sysctl.conf    echo net.ipv4.tcp_max_syn_backlog = 8192 >> /etc/sysctl.conf    echo net.core.somaxconn = 8192 >> /etc/sysctl.conf    echo net.ipv4.tcp_keepalive_time = 60 >> /etc/sysctl.conf    echo net.ipv4.tcp_keepalive_probes = 3 >> /etc/sysctl.conf    echo net.ipv4.tcp_keepalive_intvl = 15 >> /etc/sysctl.conf    echo net.ipv4.tcp_fin_timeout = 30 >> /etc/sysctl.conffi}modify_grub(){#edi_flag=`cat /etc/redhat-release |grep ‘release 5‘|wc|awk ‘{print $1}‘`#if [ $edi_flag -eq 1 ]#then    mv /boot/grub/grub.conf  /boot/grub/grub.conf_bak    sed "s/.*default.*/default=1/" /boot/grub/grub.conf_bak > /boot/grub/grub.conf    cat /boot/grub/grub.conf#fi}modify_user(){useradd mysqlusermod -G root -d /data/mysql/ mysql}mofify_iptables(){/sbin/service iptables stop/sbin/chkconfig iptables off}modify_paramodify_grubmodify_usermofify_iptables
1.4 下載二進位安裝包

https://dev.mysql.com/downloads/mysql/
https://downloads.mysql.com/archives/community/ #歸檔曆史版本

2、安裝MySQL2.1 在指定目錄安裝mysql

1、解壓

tar -xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gzmv mysql-5.6.36-linux-glibc2.5-x86_64/  /data/mysql

2、建立使用者

groupadd mysql useradd -r -g mysql -s /bin/false mysql
2.2 編輯my.cnf

1、注意

  • my.cnf 的許可權是644
  • 要手工建立my.cnf中定義的一些目錄,否則初始化會錯誤
  • 多執行個體環境下,可根據情景配置my.cnf名稱以區分,比如/data/mysql3307目錄的設定檔是/etc/my3307.cnf

2、一個簡易my.cnf

#適用於所有用戶端程式讀取[client]port                    = 3306socket                  = /data/mysql/data/mysql.sock[mysql]no_auto_rehash                                          # 當表多時,自動避免收集很多中繼資料資訊,不能自動補全prompt                  = "\\R:\\m:\\s\\d>"            #H:M:S:DBpager                  = "more"            default-character-set  = utf8mb4 [mysqld]##base settingport                    = 3306socket                  = /data/mysql/data/mysql.sock  #建議設定socket的位置在資料目錄server-id              = 171109report_host            = 10.17.1.109                  # show slave status 中主機IPbasedir                = /data/mysql  datadir                = /data/mysql/data  tmpdir                  = /data/mysql/tmpdir user                    = mysql                        # 為避免使用者--user=root向my.cnf檔案添加選項log_error              = error.loginnodb_file_per_table  = 1                            # 獨立資料表空間lower_case_table_names  = 1                            # 不區分大小寫,庫名、表名、表別名、變數名將以小寫處理character_set_server    = utf8mb4                                      collation_server        = utf8mb4_bin          ##connectionskip-sslskip_name_resolve                  = 1                # 不解析用戶端串連主機名稱,,授權表只用IP地址或localhostmax_connections                    = 1500              # 最大串連數max_allowed_packet                  = 64M              # 資料包最大大小innodb_buffer_pool_size            = 10G              # buffer pool大小,70%mem,如果設定太大超出記憶體,容易OOMinnodb_buffer_pool_instances        = 2                # 將緩衝池劃分地區,較少池內爭用##redologfile、ibdatainnodb_flush_log_at_trx_commit      = 1                # 預設1,0提交時不寫日誌,每秒寫日誌且刷盤,1提交時寫日誌並刷盤,2提交時寫日誌,每秒刷盤innodb_log_files_in_group          = 3                # redo log檔案個數innodb_log_file_size                = 2G                # redo log檔案大小## AS mastersync_binlog                        = 1    log-bin                            = /data/mysql/arch/mysql-bin    # 設定binlog路徑和檔案首碼名稱binlog_rows_query_log_events        = 1                # 在binlog中記錄原生SQLlog_bin_trust_function_creators    = 1                # 預設關閉,將function寫入binlog,避免預設情況下回阻止function的建立binlog_format                      = row              # 行模式複製max_binlog_size                    = 1G                # binlog檔案大小## AS slave relay_log                          = /data/mysql/relay_log/relay-bin  # 設定relay log路徑和檔案首碼名稱relay_log_recovery                  = 1                # 開啟新中繼日誌,從SQL執行位置重新拉取,清理老relay logsync_relay_log                      = 1                # relay log的刷盤方式,0依賴OS,n,n個事件寫入relay log後刷盤skip_slave_start                    = 1                # 避免從庫slave線程自動啟動
2.3 初始化
  • MySQL 5.6 和5.7 初始化不同
  • 通過basedir可以初始化多個datadir
2.3.1 MySQL5.6 的初始化
cd $basedir./scripts/mysql_install_db --defaults-file=/etc/my36.cnf --user=mysql      #version 5.6 
2.3.2 MySQL5.7 的初始化
cd $basedir./bin/mysqld  --defaults-file=/etc/my38.cnf --initialize-insecure --user=mysql    # version 5.7
2.4 啟動和關閉2.4.1 啟動建議
  1. 注意資料庫許可權
  2. 使用mysqld_safe來啟動MySQL,守護進程mysqld_safe能夠重新拉起突然掛掉的mysqld服務;
  3. mysqld_safe --defaults-file,表示只使用這個設定檔,在多執行個體下非常重要,不容易讀成預設設定檔
  4. 5.6啟動時,--ledir選項指定mysqld程式目錄,非常重要
2.4.2 命令
# 修改許可權chown mysql:mysql $basedirchown mysql:mysql $datadirchmod 750 mysql-files# 5.6啟動numactl --interleave=all  /data/mysql3308/bin/mysqld_safe --defaults-file=/etc/my_frontweb_snap.cnf --ledir=/data/mysql3308/bin/ &# 5.7啟動numactl --interleave=all /data/mysql20/bin/mysqld_safe --defaults-file=/etc/my20.cnf  &[1] 2435#2018-03-16T10:05:19.864783Z mysqld_safe Logging to ‘/data/mysql20/data/error.log‘.# 查看開機記錄tailf  -100 /data/mysql20/data/error.log#關閉資料庫mysqladmin -u -p -h -P shutdown
2.4.3 啟動時可能的警示和報錯
  • warning 可以忽略
  • error 一般會導致資料庫異常
# 警示1could not be looked up with /data/mysql//bin/resolveip.WARNING: The host ‘jq-db-3-22‘ could not be looked up with /data/mysql//bin/resolveip.# 解決1/etc/hosts 加入對hostname的解析# 警示2SSL context is not usable without certificate and private key[Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key#解決2在5.7中,通過ssl方式串連mysql被作為預設和推薦,如果不使用,skip掉vim /etc/my.cnf [mysqld]skip-ssl# 報錯3找這個檔案的時候報錯:[ERROR] InnoDB: Cannot open ‘/data/mysql/data/ib_buffer_pool‘ for reading: No such file or directory#解決3    ib_buffer_pool 是--innodb-buffer-pool-filename=file 這個選項是預設值。    這個檔案中放的是由於【 innodb_buffer_pool_dump_at_shutdown or innodb_buffer_pool_dump_now.】儲存下來的tablespace IDs and page IDs 的一個列表。    所以,出現這個錯誤的時候,可以指定innodb-buffer-pool-filename=file,或者是關閉innodb_buffer_pool_dump的幾個選項。
2.5 登陸2.5.1 本地使用socket登陸

注意,socket只能本地登入,mysqld服務啟動後,肯定有[email protected]使用者,且擁有最高許可權
建議:安全期間,不在/tmp公用目錄建立mysql的socket檔案

# 登陸mysql -pmima --socket=/data/mysql_3307/data/mysql.sock  # 查看串連方式17:42:25 (none)> \sConnection:            Localhost via UNIX socket  `
2.5.2 TCP/IP登陸
  • 注意
    • 需要用[email protected]‘ip‘ 的使用者,如[email protected]’127.0.0.1‘
  • 建議
    • 不建議建立[email protected]‘%‘任意地址的root使用者
【登陸】mysql -pmima -h127.0.0.1 -P3308【查看串連方式】17:43:42 (none)> \sConnection:            127.0.0.1 via TCP/IP
2.5.3 登陸錯誤處理

1、Access denied

# 報錯mysql -p123123mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)# 檢查使用者名稱和密碼(是[email protected],還是[email protected])登陸# mysql登入時會自動檢查my.cnf 中 [mysql] 和 [client]的配置,因為# cat /etc/my.cnf |more[client]port                    = 3308socket                  = /data/mysql20/data/mysql.sock所以,mysql使用socket登陸,會報錯登陸[email protected]這個使用者錯誤

2、Character set ‘utf8mb4‘ is not a compiled character set

# mysql -proot mysql: Character set ‘utf8mb4‘ is not a compiled character set and is not specified in the ‘/usr/share/mysql/charsets/Index.xml‘ file解決:# yum list installed |grep mysqlmha4mysql-node.noarch              0.57-0.el6                        @/mha4mysql-node-0.57-0.el6.noarchmysql.x86_64                        5.1.73-8.el6_8                    @base    #因為安裝了這個mysql-devel時,安裝了mysql5.1的用戶端mysql-devel.x86_64                  5.1.73-8.el6_8                    @base    mysql-libs.x86_64                  5.1.73-8.el6_8                    @base    zabbix-web-mysql.noarch            3.4.7-1.el6                        @zabbix  # yum remove mysql.x86_64 
2.6 密碼破解

通過選項skip-grant-tables來啟動資料庫:

  • --skip-grant-tables選項,此選項使伺服器根本無需使用許可權系統即可啟動,使得所有人訪問資料庫不要求輸入密碼
  • 登陸後,通過set 或者alter 修改使用者密碼
  • 在shell中執行mysqladmin flush-privilegesmysqladmin reload命令,或登陸mysql後,flush privilege 讓MySQL Serer重新載入授權表
# 啟動numactl --interleave=all  /data/mysql3308/bin/mysqld_safe --defualts-file=/etc/my.cnf  --skip-grant-tables & [1] 2435# 登陸mysql -urootWelcome to the MySQL monitor.  Commands end with ; or \g.#載入授權表,否則ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement18:06:28(none)>flush privileges;#修改密碼set password for [email protected] = password(‘root‘);
2.7 MySQL進程檢測

1、進程檢測

# 檢測命令ps -ef |grep mysqldps aux |grep mysqld# 進程資訊root    36133 21704  0 17:35 pts/1    00:00:00 /bin/sh /data/mysql3308/bin/mysqld_safe --defaults-file=/etc/my_frontweb_snap.cnf --ledir=/data/mysql3308/bin/mysql    36978 36133  1 17:35 pts/1    00:00:06 /data/mysql3308/bin//mysqld --defaults-file=/etc/my_frontweb_snap.cnf --basedir=/data/mysql3308 --datadir=/data/mysql3308/data --plugin-dir=/data/mysql3308/lib/plugin --user=mysql --log-error=/data/mysql3308/data/error.log --open-files-limit=655350 --pid-file=/data/mysql3308/data/hadoop-jq-9-31.pid --socket=/data/mysql3308/data/mysql.sock --port=3308# 關於進程號可以從進程號中看出,root使用者啟動了mysqld_safe進程,mysql的父進程是mysqld_safe進程,也就是說,mysqld_safe拉起了mysql的mysqld程式

2、連接埠檢測

# netstat檢測netstat -an |grep 3306tcp        0      0 10.17.9.31:22261            10.17.1.110:3306            ESTABLISHED tcp        0      0 :::3306                    :::*                        LISTEN  # lsof檢測,需要安包rpm -qf `which lsof`lsof-4.82-4.el6.x86_64lsof -i:3306 COMMAND  PID  USER  FD  TYPE    DEVICE SIZE/OFF NODE NAMEmysqld  3229 mysql  16u  IPv6    15009      0t0  TCP *:mysql (LISTEN)

3、用戶端檢測

# mysql登入檢測能使用mysql登入指定mysqld服務,服務肯定是在啟動並執行# mysqladmin ping檢測mysqladmin -pmima  ping      mysqld is alive
3、安裝善後操作3.1 mysql_secure_installation安全性改裝

1、簡介

  • 這和mysql一樣,是一個用戶端程式,程式在$basedir/bin/下
  • /data/mysql/bin/mysql_secure_installation
  • 作用是改進安裝安全性,建議版本低於5.7的一定使用

2、如何使用

./mysql_secure_installation --help# ./mysql_secure_installation -S /data/mysql3307/data/mysql.sockSecuring the MySQL server deployment.Enter password for user root: mysql_secure_installationEnter current password for root (enter for none):      # 密碼為空白,直接斷行符號Change the root password? [Y/n] Y                      #修改密碼Remove anonymous users? [Y/n] y                        #移除匿名使用者.              ,5.7預設沒有匿名使用者Disallow root login remotely? [Y/n] y                  #禁止root使用者遠程登陸[email protected]’%’,5.7沒有[email protected]‘%‘使用者Remove test database and access to it? [Y/n] y          #移除test資料庫              ,5.7無test資料庫Reload privilege tables now? [Y/n] y                    #重新整理許可權表
3.2 PATH 變數設定

1、優缺點

  • 優點
    • 設定path變數之後,對於mysql的很多程式都能直接使用
  • 缺點
    • 對於多執行個體的情況下,很容易造成生產的問題,比如:
    • 已有5.6mysql服務在運行,PATH變數設定的$5.6basedir/bin,想初始化或啟動5.7的服務,必須使用5.7的絕對路徑的命令,不然啟動了一個5.6mysqld服務

2、如何設定

# 編輯檔案vim /etc/profile#最後追加,以‘:‘分隔PATH=$PATH:/data/mysql3308/bin# 生效. /etc/profile
3.3 開機自啟

不在生產環境中使用開啟自動啟動mysqld服務。以為server一般不會重啟,故障大都是硬體側面,使用HA提供持續服務

3.3.1 建立系統service服務

利用$basedir/support-files/mysql.server 指令碼建立/etc/init.d/mysqld 的快捷啟動

#1、建立服務cp $basedir/support-files/mysql.server /etc/init.d/mysqld        修改指令碼chkconfig mysql on#2、修改修改/etc/init.d/mysqld 指令碼內容#266行  numactl --interleave=all /ssd_data/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  &-------------------------------------------------#3、將mysqld服務開機啟動chkcofig mysqld on     #開機啟動chkconfig --list |grep mysqld    #查看啟動項
3.3.2 啟動命令加入rc.local

將mysqld_safe啟動命令放到 /etc/rc.local中

cat /etc/rc.local#追加內容:numactl --interleave=all /ssd_data/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  &
3.4 alias設定

建立alias別名命令,並寫入系統設定檔

vim  /etc/profile# 追加一下內容alias mysql3306=‘mysql -uroot -p123123 -h127.0.0.1 -P3306‘alias mysql3306shutdown=‘mysql -uroot -p123123 -h127.0.0.1 -P3306 shutdown‘alias mysqlstartup=‘/etc/init.d/mysql start‘alias vimmycnf=‘vim /export/servers/mysql/etc/my.cnf‘

MySQL二進位安裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.