<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          4步搞定MySQL安裝部署(附MySQL一鍵式部署腳本)

          共 2088字,需瀏覽 5分鐘

           ·

          2021-01-15 18:37

          墨墨導(dǎo)讀:良好的開端是成功的一半,從MySQL安裝開始。


          學(xué)習(xí)數(shù)據(jù)庫技術(shù),實(shí)際動(dòng)手的第一步是安裝自己的MySQL。MySQL方面也提供多樣式的安裝方式rpm ,tar ,源碼包。當(dāng)安裝完投入使用之后,隨著業(yè)務(wù)量,數(shù)據(jù)量的增加,往往會(huì)碰到很多意向不到的問題。如性能,安全,配置不合理等。對于最佳實(shí)踐,都應(yīng)該注意哪些。


          1. MySQL 安裝部署流程



          1. 操作系統(tǒng)

          • Selinux:建議關(guān)閉SELinux功能,通過MySQL本身進(jìn)行安全控制
          • Firewalld Iptable:防火墻肯定要設(shè)置 或則 關(guān)閉
          • 時(shí)區(qū):對于系統(tǒng)的來說 時(shí)間是非常重要指標(biāo)
          • 網(wǎng)絡(luò)配置:高配置機(jī)器,網(wǎng)卡MTU提高,建議將私網(wǎng)網(wǎng)卡的MTU值增加到9000,同時(shí)啟用私網(wǎng)交換機(jī)的Jumbo Frame屬性。
          • 磁盤格式:在平均文件較小,并發(fā)較小的IO場景,ext4和xfs表現(xiàn)差不多,前者略微勝出。當(dāng)文件較大,并發(fā)較大時(shí),xfs比ext4性能更好,同時(shí)更穩(wěn)定。實(shí)際使用上來說,一般數(shù)據(jù)庫的文件系統(tǒng)推薦用xfs。xfs的恢復(fù)比較麻煩,,這方面ext4的fschk修復(fù)成功率較高,而且ext4的社區(qū)支持比較完備。
          • 盤調(diào)度算法:默認(rèn)是使用的CFQ算法,對于數(shù)據(jù)庫專用服務(wù)器,如果為機(jī)械磁盤,建議將磁盤調(diào)度算法調(diào)整為deadline模式,如果為固態(tài)硬盤,調(diào)整為noop模式,以提升I/O吞吐量和降低I/O響應(yīng)時(shí)間。
          • 虛擬內(nèi)存使用策略:vm.swappiness,以提高mysql對內(nèi)存的使用效率
          • 資源限制:limits.conf的 nproc ?nofile
          • 內(nèi)核參數(shù):net.ipv4.tcp 相關(guān)的
          • 信號量:對應(yīng)InnoDB: a long semaphore wait

          2. MYSQL軟件安裝

          • 下載版本:一定是官方下載,應(yīng)用測試過兼容的版本
          • 安裝依賴:mysql執(zhí)行依賴包
          • 安裝部署:建議tar.gz包

          3. MYSQL軟件安裝

          • 用戶:安全考慮
          • 數(shù)據(jù)目錄:便于管理 提升io性能
          • 權(quán)限賦予:賦予特定用戶權(quán)限 執(zhí)行權(quán)限
          • my.cnf配置:按照硬件配置,合理的配置

          4. MYSQL初始化

          • 初始化:初始化系統(tǒng)數(shù)據(jù)
          • 密碼:密碼修改,不安全賬號刪除
          • 第三方工具:pt-toolkit,xtrabackup 等常用運(yùn)維工具


          2. MySQL 一鍵式部署腳本


          基于5.7.32編寫的自動(dòng)安裝部署腳本。操作系統(tǒng)方面只加了資源添加部分。

          Vim MySQL_AutoSetup .sh


          #!/bin/bash#####MySQL5.7.32數(shù)據(jù)庫自動(dòng)安裝腳本# Version:      1.0# Author:       kevinCUI# Date:         2020-12-31######mysql 安裝包的絕對路徑,去掉.tar.gztarGzPath=/opt/idc/tarGzFile=mysql-5.7.32-linux-glibc2.12-x86_64#mysql 安裝路徑installPath=/home/mysql/
          #my.cnf配置文件mysqlcnf=/home/mysql/my.cnf
          #mysql serverid需要設(shè)置唯一的id,比如 ip+3位數(shù)字mysqlServerid=1010101
          #mysql 密碼(不可擅自修改)defaultPwd=123456
          #mysql 端口mysqlPort=3306
          #mysql數(shù)據(jù)目錄data_default=${installPath}${mysqlPort}data_datadir=${data_default}/datadata_binlog=${data_default}/binlogdata_dbdata=${data_default}/dbdatadata_logs=${data_default}/logsdata_tmp=${data_default}/tmpdata_undo=${data_default}/undo# 校驗(yàn)是否為ROOT用戶CheckRoot(){if [ $(id -u) != "0" ]; then echo "Error: You must be root to run this script, please use root to install" exit 1ficlear} #優(yōu)化文件最大打開數(shù)DependFile(){
          if [ $( cat /etc/security/limits.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.conf << EOF* soft nproc 65536* hard nproc 65536* soft nofile 65536* hard nofile 65536mysql soft nproc 65536mysql hard nproc 65536mysql soft nofile 65536mysql hard nofile 65536EOF
          fi
          if [ -e /etc/security/limits.d/20-nproc.conf ];thenif [ $( cat /etc/security/limits.d/20-nproc.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.d/20-nproc.conf<mysql soft nproc unlimitedEOF
          fifi
          if [ -e /etc/security/limits.d/90-nproc.conf ];thenif [ $( cat /etc/security/limits.d/90-nproc.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.d/90-nproc.conf<mysql soft nproc unlimitedEOF
          fifi
          if [ -e /etc/sysctl.conf ];thenfs_file=$( cat /proc/sys/fs/file-max)if [ ${fs_file} -lt 65535 ] ;thensed -i "s/${fs_file}/65535/g" /etc/sysctl.conf/usr/sbin/sysctl -p
          fifi
          echo -e "\e[31m #1.配置基礎(chǔ)資源 \e[0m"
          }
          #拷貝tar.gz包DecompressionTarGz(){if [ ! -e ${tarGzPath}${tarGzFile}.tar.gz ];then echo -e "\e[31m ${tarGzPath}${tarGzFile}.tar.gz 不存在!請檢查后重新執(zhí)行腳本 \e[0m" exit 1fi#解壓并重命名到安裝目錄if [ ! -d ${installPath}${tarGzFile} ] ;then mkdir -p ${installPath} tar -xvf ${tarGzPath}${tarGzFile}.tar.gz -C ${installPath} &> /dev/nullfi
          echo -e "\e[31m #2.軟件已解壓 \e[0m"
          }#添加組合角色AddMysqlUser(){if [ ! $(id -u "mysql") ]; then echo "mysql user is not exists for to created" /usr/sbin/groupadd mysql /usr/sbin/useradd -g mysql -r -s /sbin/nologin -M mysqlfi
          echo -e "\e[31m #3.mysql啟動(dòng)用戶已準(zhǔn)備完成 \e[0m"
          }
          #創(chuàng)建mysql 數(shù)據(jù)目錄createMysqlFolder(){if [ -d ${data_default} ] ;then if [ $(du -s ${data_default} | awk 'NR==1{print $1}') -gt 0 ] ;then mv ${data_default} ${data_default}"`date +%Y%m%d%H%M`" fifi
          mkdir -p ${data_datadir}mkdir -p ${data_binlog}mkdir -p ${data_dbdata}mkdir -p ${data_logs}mkdir -p ${data_tmp}mkdir -p ${data_undo}
          #賦予權(quán)限chown -R mysql:mysql ${data_default}chmod 700 ${data_tmp}
          echo -e "\e[31m #4.mysql 數(shù)據(jù)目錄 權(quán)限 已準(zhǔn)備完成 \e[0m"
          }
          #創(chuàng)建my.cnfMakeMyCnf(){
          if [ -e ${mysqlcnf} ] ;then #mv ${mysqlcnf} ${mysqlcnf}"`date +%Y%m%d%H%M`" rm ${mysqlcnf}fi
          cat >${mysqlcnf}<[mysqld_safe]user = mysqlnice = 0
          [client] socket = ${data_datadir}/mysql.sockport = ${mysqlPort}
          [mysqld]############# GENERAL #############skip_sslskip-name-resolveautocommit = ONcharacter_set_server = utf8mb4collation_server = utf8mb4_unicode_ciexplicit_defaults_for_timestamp = ON lower_case_table_names = 1port = ${mysqlPort}read_only = OFFtransaction_isolation = READ-COMMITTEDopen_files_limit = 65535max_connections = 2000expire_logs_days = 10default-time_zone = '+8:00'####### CACHES AND LIMITS #########interactive_timeout = 600 lock_wait_timeout = 300max_connect_errors = 1000000
          table_definition_cache = 2000table_open_cache = 2000 table_open_cache_instances = 8
          thread_cache_size = 32thread_stack = 256K
          tmp_table_size = 32Mmax_heap_table_size = 64M
          query_cache_size = 0query_cache_type = 0
          sort_buffer_size = 1Mjoin_buffer_size = 1Msort_buffer_size = 1Mread_rnd_buffer_size = 2M
          innodb_io_capacity = 1000 innodb_io_capacity_max = 2000
          max_allowed_packet = 1024Mslave_max_allowed_packet = 1024Mslave_pending_jobs_size_max = 1024M

          ############# SAFETY ##############local_infile = OFFskip_name_resolve = ONsql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES
          ############# LOGGING #############general_log = 0log_queries_not_using_indexes = ONlog_slow_admin_statements = ONlog_warnings = 2long_query_time = 1 #1秒慢日志slow_query_log = ON
          ############# REPLICATION #############
          server_id = ${mysqlServerid} #ip+3位數(shù)字binlog_checksum = CRC32binlog_format = ROWbinlog_rows_query_log_events = ON
          enforce_gtid_consistency = ONgtid_mode = ONlog_slave_updates = ON
          master_info_repository = TABLEmaster_verify_checksum = ON
          max_binlog_size = 512Mmax_binlog_cache_size = 1024M #已修改,原值1024binlog_cache_size = 8M
          relay_log_info_repository = TABLEskip_slave_start = ONslave_net_timeout = 10slave_sql_verify_checksum = ON
          sync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1
          ############### PATH ##############basedir = ${installPath}${tarGzFile}
          datadir = ${data_datadir}tmpdir = ${data_tmp}socket = ${data_datadir}/mysql.sockpid_file = ${data_datadir}/mysql.pidinnodb_data_home_dir = ${data_dbdata}
          log_error = ${data_logs}/error.loggeneral_log_file = ${data_logs}/general.logslow_query_log_file = ${data_logs}/slow.log
          log_bin = ${data_binlog}/mysql-binlog_bin_index = ${data_binlog}/mysql-bin.indexrelay_log = ${data_binlog}/relay-logrelay_log_index = ${data_binlog}/relay-log.index
          # undo settingsinnodb_undo_directory = ${data_undo}innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 16Minnodb_undo_tablespaces = 4

          ############# INNODB #############innodb_file_format = barracudainnodb_flush_method = O_DIRECT
          innodb_buffer_pool_size = 1024Minnodb_buffer_pool_instances = 4 innodb_thread_concurrency = 0
          innodb_log_file_size = 1024Minnodb_log_files_in_group = 2innodb_flush_log_at_trx_commit = 1innodb_support_xa = ONinnodb_strict_mode = ON
          innodb_data_file_path = ibdata1:32M;ibdata2:16M:autoextendinnodb_temp_data_file_path = ibtmp1:1G:autoextend:max:30Ginnodb_checksum_algorithm = strict_crc32innodb_lock_wait_timeout = 600
          innodb_log_buffer_size = 8Minnodb_open_files = 65535
          innodb_page_cleaners = 1innodb_lru_scan_depth = 256innodb_purge_threads = 4innodb_read_io_threads = 4innodb_write_io_threads = 4
          innodb_print_all_deadlocks = 1
          [mysql]############# CLIENT ############# max_allowed_packet = 16Msocket = ${data_datadir}/mysql.sockno-auto-rehash
          [mysqldump] max_allowed_packet?????????????????=?16M
          EOF
          echo -e "\e[31m #5.mysql cnf配置完成,【需要按照實(shí)際情況更改】 \e[0m"}
          #初始化數(shù)據(jù)庫InitDataBase(){#cd ${installPath}${tarGzFile}${installPath}${tarGzFile}/bin/mysqld --defaults-file=${mysqlcnf} --basedir=${installPath}${tarGzFile} --datadir=${data_datadir} --user=mysql --initialize
          ${installPath}${tarGzFile}/bin/mysqld_safe --defaults-file=${mysqlcnf} --user=mysql &
          echo -e "\e[31m #6. 初始化數(shù)據(jù)庫完成并啟動(dòng)服務(wù). \e[0m"
          }
          #重置密碼ResetPwd(){sleep 10s#從日志中獲取mysql初始密碼pwd=`grep "A temporary password is generated for root@localhost: " ${data_logs}/error.log`pwd=${pwd##*root@localhost:}#防止因?yàn)槌跏济艽a中有特殊字符出錯(cuò) 拼接單引號pwd=${pwd// /}echo ${pwd}${installPath}${tarGzFile}/bin/mysql -uroot -p${pwd} -S ${data_datadir}/mysql.sock --connect-expired-password -e "alter user 'root'@'localhost' identified by '${defaultPwd}';"
          echo -e "\e[31m #7. 已重置數(shù)據(jù)庫密碼。登錄方式如下: \e[0m"echo -e "\e[31m ${installPath}${tarGzFile}/bin/mysql -uroot -p -S ${data_datadir}/mysql.sock \e[0m"
          }#ResetPwd
          main() { ###1.校驗(yàn)是否為ROOT用戶CheckRoot
          ###2.優(yōu)化文件最大打開數(shù)DependFile
          ###3.拷貝tar.gz包DecompressionTarGz
          ###4.添加組合角色AddMysqlUser
          ###5.創(chuàng)建mysql 數(shù)據(jù)目錄createMysqlFolder
          ###6.創(chuàng)建my.cnfMakeMyCnf
          ###7.初始化數(shù)據(jù)庫InitDataBase
          ###8.重置密碼ResetPwd
          }
          main

          3.總結(jié)


          良好的開端是成功的一半,MySQL是輕量級數(shù)據(jù),安裝部署也需要學(xué)問,粗略的安裝往往會(huì)導(dǎo)致后期的一些各種大小問題??紤]的越周全,走的越遠(yuǎn)。


          關(guān)聯(lián)網(wǎng)構(gòu),價(jià)。


          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美黑人大吊 | 亚洲性爱操逼大片 | 嫩草 www天堂资源在线观看 | 操黑丝在线 | 大香蕉插插插 |