Mysql安装及自动化部署脚本方案
一.簡介
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,
每個數據庫都有一個或多個不同的API用于創建,訪問,管理,搜索和復制所保存的數據。
我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。
所以,現在我們使用關系型數據庫管理系統(RDBMS)來存儲和管理的大數據量。所謂的關系型數據庫,是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫中的數據。
RDBMS即關系數據庫管理系統(Relational Database Management System)的特點:
- 1.數據以表格的形式出現
- 2.每行為各種記錄名稱
- 3.每列為記錄名稱所對應的數據域
- 4.許多的行和列組成一張表單
- 5.若干的表單組成database
二.安裝環境搭建
四種方法
?? ?1、通過二進制的方式安裝
?? ??? ?1) rpm(redhat/mysql rpm)
?? ??? ?2) mysql glbic
優點:安裝和維護都比較方便,不需要編譯。
缺點:可定制性差,可移植性差,一個系統上只能安裝一個mysql
?? ??? ?
?? ??? ?
?? ?2、通過源代碼編譯的安裝(mysql-xx.tar.gz)
?? ??? ?5.1源碼安裝
?? ??? ?5.5源碼安裝
優點:可定制性強(安裝可以根據用戶的需求,只安裝所需要的功能)
缺點:安裝復雜,所需要的時候比二進制的安裝要長得多?
2.1 二進制安裝
1、redhat RPM
# yum list |grep mysql
mysql.x86_64???????????????? ??? ??? ?? --客戶端???????????????????????? ?
mysql-libs.x86_64??????????????????????????? --庫包(類似于dll),可以讓第三方程序調用這些庫文件,擴充軟件的功能。 ?
mysql-server.x86_64??????????????????????? --服務器軟件包????????????? ?
mysql-bench.x86_64???????????? ??? ?? --壓力測試工具包???????????????? ?
mysql-connector-odbc.x86_64???????? --連接器????????????????????????????????????? ?
mysql-devel.x86_64???????????????????????? --開發包???????????????????????? ?
mysql-test.x86_64??????????????????????????? --測試數據庫包????? ?
1、安裝軟件
rpm -ivh mysqlrpm or
#yum -y install mysql-server mysql
service mysqld start
2、建立配置文件/etc/my.cnf
# vim /etc/my.cnf
[mysqld]?? ?<---[進程名字] 對應的配置給予對應的進程名字的進程使用,mysqld是服務端
datadir=/data?? ?<---數據庫用于存放數據的數據文件所在路徑
socket=/data/mysqld.sock <---套接字文件,服務啟動的時候生成,服務正常關閉就刪除該文件
user=mysql?? ?<--- 服務運行的有效身份
port=3306?? ?<--- tcp協議監聽的端口
2.glibc安裝
# service mysql stop?? ?--先停止RPM包安裝的mysqld
# tar xzvf mysql-5.5.25-linux2.6-x86_64_glibc.tar.gz -C /opt
參照安裝文檔
INSTALL-BINARY
******************************************************
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /opt
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &
shell> cp support-files/mysql.server /etc/init.d/mysql.glbic
# vim /etc/init.d/mysql.glibc
basedir=/opt/mysql-glibc
*******************************************??
3.源碼安裝5.1
# pkill mysql
# tar xzvf mysql-5.1.58.tar.gz -C /usr/local/src/
# cd /usr/local/src/mysql-5.1.58/
# ./configure --prefix=/opt/mysql-source --with-big-tables --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-charset=utf8 --with-extra-charsets=all
?--with-big-tables?? ??? ??? ??? ??? ?64系統支持4G的大表
?--with-mysqld-ldflags=-all-static?? ??? ?服務端使用靜態庫的方式編譯
?--with-client-ldflags=-all-static?? 客戶端使用表態庫的方式編譯官方稱可提升mysql5%-10%左右的性能,靜態編譯就是把程序要用到的一些庫文件給編譯到程序里,那么調用方便,當然編譯 軟件的體積會大一點。
?--with-charset=utf8?? ??? ??? ??? ??? ?--指定默認的語言編碼utf8
?--with-extra-charsets=all?? ??? ??? ??? ?--指定擴展的語言編碼
# make && make install
# cd /opt/mysql-source/
# chown mysql.mysql . -R
# mv /etc/my.cnf /etc/my.cnf.bak.bak
# ./bin/mysql_install_db --user=mysql
# chown root . -R
# chown mysql var -R
# cp share/mysql/mysql.server /etc/init.d/mysql.souce
# vim /etc/init.d/mysql.souce
basedir=/opt/mysql-source
datadir=/opt/mysql-source/var
4.C語言編譯安裝
1.安裝cmake
# tar? xzf cmake-2.8.7.tar.gz –C /usr/local
# cd /usr/local/cmake-2.8.7
# ./configure && make &&make install
2.安裝mysql
shell> cmake . -L?? # overview等于./confgiure --help
shell> cmake . -LH? # 查看簡約的幫助,相比上一步有更詳細一點的選項說明
shell> cmake . -LAH # 查看所有的配置選項,包括選項的解釋說明
shell> ccmake .???? #偽圖形界來配置軟件
?
shell> tar zxf? mysql-5.5.28.tar.gz –C /usr/local/
shell> cd /usr/local/mysql-5.5.28
shell> cmake . -DCMAKE_INSTALL_PREFIX=/usr/src/mysql \ --指定安裝路徑
-DWITH_INNOBASE_STORAGE_ENGINE=1 \???? --啟用innodb存儲引擎
-DENABLED_LOCAL_INFILE=1 \??????????? --允許通過本地導入數據
-DDEFAULT_CHARSET=utf8 \?????????????? --指定默認的語言編碼
-DEXTRA_CHARSETS=all \??????????????????? --擴展語言編碼
-DDEFAULT_COLLATION=utf8_general_ci \?????? --排序語言編碼
-DSYSCONFDIR=/usr/src/mysql/etc \??????? --配置文件的目錄
-DMYSQL_DATADIR=/data \??????????????? --數據目錄
-DMYSQL_UNIX_ADDR=/data/mysql.sock \???? --socket目錄
shell> make && make install
shell> cd /opt/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts /mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell>cp /etc/my.cnf /etc/my.cnf.bak
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &
shell>netstat –antpl |grep mysqld? ---檢驗服務是否開啟
?
3.更改配置生成mysql啟動腳本
# cp support-files/mysql.server /etc/init.d/mysql.server
# ls /etc/init.d |find mys
# mv /etc/init.d/mysql.server? /etc/init.d/mysqld
# vi /etc/init.d/mysqld
?
測試mysql文件是否生效
# service mysqld restart
4.將mysql服務實現開機自啟動
# chkconfig mysqld on
?
三.安裝完成后環境配置
3.1.數據庫基礎配置,創建維護賬號
select user,host,password from mysql.user;? --查看數據庫用戶信息
create user 'test'@'%' identified by 'CFVIRTUAL3303';? --創建遠程用戶
create user 'test'@'localhost' identified by 'CFVIRTUAL3303'; --創建本地用戶
grant all privileges on *.* to 'test'@'%' identified by 'password' WITH GRANT OPTION;? --授權用戶所有數據庫權限
flush privileges;
update user set password='password' where user='yuming'; --更改用戶密碼
??????
grant all privileges on mobiledb.* to 'test'@'%' WITH GRANT OPTION; --授權某個用戶指定數據庫
flush privileges;? ---刷新數據庫權限
?3.2?調整my.cnf 的默認配置參數
# vim /usr/local/mysql/etc/my.cnf文件內容如下: [client] port = 3307 socket = /usr/local/mysql/sockets/mysqld.sock[mysqld] port = 3307 socket = /usr/local/mysql/sockets/mysqld.sock log-error=/usr/local/mysql/mysql_error.log datadir=/usr/local/mysql/var relay-log = /usr/local/mysql/var/slave-relay.log relay-log-info-file=/usr/local/mysql/var/relay-log.info relay-log-index =/usr/local/mysql/var/relay-log.indexskip-external-lockingback_log = 50 skip-name-resolve max_connections =2500 max_connect_errors = 1000auto-increment-increment = 2 auto-increment-offset = 1table_open_cache = 2048 max_allowed_packet = 1024M binlog_cache_size = 1M max_heap_table_size = 1024M sort_buffer_size = 32M join_buffer_size = 8M thread_cache_size = 16 query_cache_size = 16M query_cache_limit = 2M ft_min_word_len = 4default-storage-engine = INNODB transaction_isolation = REPEATABLE-READ tmp_table_size = 512M log-bin=mysql-bin binlog_format=mixed expire_logs_days = 7 slow_query_log long_query_time = 2 server-id = 2 key_buffer_size = 256M read_buffer_size = 8M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1myisam_recover innodb_file_per_table innodb_data_home_dir = /usr/local/mysql/var innodb_additional_mem_pool_size = 16M innodb_buffer_pool_size = 1G innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /usr/local/mysql/var #innodb_file_io_threads = 48 innodb_read_io_threads =8 innodb_write_io_threads =8 innodb_thread_concurrency = 8innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 8M innodb_log_file_size = 256M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_flush_method = O_DIRECT[mysqldump] quick max_allowed_packet = 1024M[mysql] no-auto-rehash[myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M[mysqlhotcopy] interactive-timeout[mysqld_safe] open-files-limit = 8192 #!/usr/bin/python # -*- coding: utf-8 -*- ################################################################################ # #Coding : utf-8 #FileName : ist_mysql.py #Desc : 自動化安裝Mysql #call : python ist_mysql.py mysql用戶密碼 server-id 綁定IP地址 innodb緩沖區大小 安裝軟件存放路徑 軟件安裝目錄 軟件數據存放目錄 軟件日志存放目錄 # #example : python ist_mysql.py mysql@2015 2015110301 127.0.0.1 4G /usr/local/src /usr/local/mysql /mysql/data /mysql/logs ################################################################################"""this script for auto install mysql."""import os import sys import pub_printlogSHELLSTRING = ''' #!/bin/bash #安裝軟件存放路徑 %s #軟件安裝目錄 %s #軟件數據存放目錄 %s #軟件日志存放目錄 %s #配置文件存放目錄 /etc/my.cnf #sock文件存放目錄 /tmp/mysql.sock #假設安裝時間2015年09月09日15時 #此臺服務器為當日安裝的第一臺服務器 server-id=2015090901#創建mysql用戶 id mysql groupadd -g 525 mysql useradd -g mysql -m -d /home/mysql -u 525 mysql #設置mysql用戶密碼 passwd --stdin mysql << 'MUL' %s MULcd %s/#解壓安裝 cd .. tar -zxvf %s/mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.25-linux-glibc2.5-x86_64/ mysql cd mysql/#創建數據目錄及數據日志存放目錄 mkdir -p %s mkdir -p %s#修改配置文件,里面對應的參數設置應根據系統配置做相應修改 cat >>/etc/my.cnf<<'MUL' [client] #comment those three rows when use mysqlbinlog. #------------------------------------------------- #prompt="\\\\u@\\\\h:\\\\d \\\\r:\\\\m:\\\\s>" #default-character-set=utf8 #no-auto-rehash #------------------------------------------------- port= 3306 socket= /tmp/mysql.sock[mysqld] ##general configuration server-id = %s #bind-address = %s user=mysql port=3306 basedir=%s datadir=%s socket=/tmp/mysql.sock pid-file=%s/mysql.pid event_scheduler = 0 lower_case_table_names=1 character-set-server = utf8 transaction-isolation = REPEATABLE-READ skip_name_resolve max_connect_errors = 100000 skip-external-locking innodb_file_per_table = 1 innodb_data_home_dir = %s innodb_data_file_path= ibdata1:1G:autoextend innodb_log_group_home_dir = %s innodb_buffer_pool_size= %s innodb_log_files_in_group = 3 innodb_log_file_size = 256M innodb_log_buffer_size = 32M innodb_flush_log_at_trx_commit = 2 innodb_lock_wait_timeout = 50 key_buffer_size = 128M bulk_insert_buffer_size = 32M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G read_buffer_size = 2M read_rnd_buffer_size = 8M sort_buffer_size = 4M join_buffer_size = 8M max_connections = 2048 open_files_limit = 65535 table_open_cache = 512 tmp_table_size = 256M max_heap_table_size = 256M query_cache_type = 1 query_cache_size = 512M query_cache_limit = 2M query_cache_min_res_unit = 512 thread_cache_size = 1024 thread_stack = 256K slow_query_log=1 slow_query_log_file = %s/mysql-slow.log long_query_time = 1 log-error = %s/mysql-error-log.err log_warnings = 2 log-bin = %s/mysql-bin binlog_format = row max_binlog_size = 1G binlog_cache_size = 4M max_binlog_cache_size = 2G sync_binlog = 0 expire_logs_days = 7##bestpay secure configuration sql_mode=NO_AUTO_CREATE_USER local_infile=off secure_authMUL#將數據目錄的屬主更改為mysql,否則會導致數據初始化失敗 chown -R mysql.mysql /mysql/ ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql &sleep 180ls %s/mysql/#重命名數據目錄下的配置文件名,否則會導致部分/etc/my.cnf中的配置失效,命名規則為my+年份前兩位+月日 mv my.cnf my`date +%%y%%m%%d`.cnf#檢查對應的目錄下初始化的數據是否正常 ls %s/ ls %s/#設置PATH變量 cat>>/etc/profile<<'MUL' export MYSQL_HOME=%s export PATH=$PATH:$MYSQL_HOME/bin MULsource /etc/profile#修改文件屬主及權限 chown mysql.mysql /etc/my.cnf chmod 644 /etc/my.cnfcp %s/support-files/mysql.server /etc/init.d/mysqld chown root.root /etc/init.d/mysqld chmod 755 /etc/init.d/mysqld chown -R mysql.mysql %s chmod 755 %s chown -R mysql.mysql %s/ chmod 755 %s/#啟動mysql服務 service mysqld start#設置服務自啟動 cat>>/etc/rc.local<<'MUL' /etc/init.d/mysqld start MUL#安裝完畢! echo 'mysql has installed! script exit.' '''def write_file(filename, content):"""this function write shell file."""file_object = open(filename, 'w')try:file_object.write(content)finally:file_object.close()if __name__ == '__main__':pub_printlog.printalllog('ist_mysql', '開始運行。')if not len(sys.argv) == 9:pub_printlog.printlog('error', 'ist_mysql', '參數數量錯誤。目前只接收到%s個參數。' % (len(sys.argv)))print 'argv number wrong!'print '正確的參數傳遞應該為:python ist_mysql.py mysql用戶密碼 server-id 綁定IP地址 innodb緩沖區大小 安裝軟件存放路徑 軟件安裝目錄 軟件數據存放目錄 軟件日志存放目錄'pub_printlog.printalllog('ist_mysql', '運行結束。')exit()#產生SHELLSTRING腳本pub_printlog.printlog('info', 'ist_mysql', '產生SHELLSTRING腳本。')write_file('/root/ist_mysql.sh', SHELLSTRING % (sys.argv[5],sys.argv[6],sys.argv[7],sys.argv[8],sys.argv[1],sys.argv[5],sys.argv[5],sys.argv[7],sys.argv[8],sys.argv[2],sys.argv[3],sys.argv[6],sys.argv[7],sys.argv[7],sys.argv[7],sys.argv[7],sys.argv[4],sys.argv[8],sys.argv[8],sys.argv[8],sys.argv[7],sys.argv[7],sys.argv[8],sys.argv[6],sys.argv[6],sys.argv[7],sys.argv[7],sys.argv[6],sys.argv[6]))pub_printlog.printlog('info', 'ist_mysql', 'SHELLSTRING腳本生成完畢。')#修改權限pub_printlog.printlog('info', 'ist_mysql', '修改權限。')os.system('chmod 774 /root/ist_mysql.sh')pub_printlog.printlog('info', 'ist_mysql', '修改權限完畢。')#執行腳本pub_printlog.printlog('info', 'ist_mysql', '執行腳本。')os.system('/root/ist_mysql.sh')pub_printlog.printlog('info', 'ist_mysql', '執行腳本完畢。')#睡眠3分鐘,等待mysql服務起來。最好的辦法是進程檢測。此處偷懶。#pub_printlog.printlog('info', 'ist_mysql', '睡眠3分鐘。')#time.sleep(180)#pub_printlog.printlog('info', 'ist_mysql', '睡眠3分鐘結束。')#對帳號進行處理。#修改root帳號密碼。#mysqladmin不識別prompt。只能用別的方法。去掉注釋請增加import time模塊的代碼。#os.system("/usr/local/mysql/bin/mysqladmin -u root password 'root'")#os.system("/usr/local/mysql/bin/mysqladmin -u root -h 127.0.0.1 password 'root'")pub_printlog.printlog('info', 'ist_mysql', '修改root帳號密碼。')os.system('''%s/bin/mysql -u root -e "%s"''' % (sys.argv[6], "update mysql.user set password=password('root') where user='root';"))os.system('''%s/bin/mysql -u root -e "%s"''' % (sys.argv[6], "flush privileges;"))pub_printlog.printlog('info', 'ist_mysql', '修改root帳號密碼完成。')#刪除危險帳號。pub_printlog.printlog('info', 'ist_mysql', '刪除危險帳號。')pub_printlog.printlog('info', 'ist_mysql', '刪除空名與::1主機帳號。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "delete from mysql.user where user='';"))os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "delete from mysql.user where host='::1';"))OUTPUT = os.popen('hostname')HOSTNAME = OUTPUT.read().replace('\n', '').replace('\r', '')pub_printlog.printlog('info', 'ist_mysql', '刪除主機名帳號。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "delete from mysql.user where host = '%s';" % (HOSTNAME)))os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "flush privileges;"))pub_printlog.printlog('info', 'ist_mysql', '刪除危險帳號完成。')#增加復制帳號,備份帳號,監控帳號。pub_printlog.printlog('info', 'ist_mysql', '增加復制帳號。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "grant replication slave on *.* to replication@'172.%' identified by 'slave@2015';"))pub_printlog.printlog('info', 'ist_mysql', '增加備份帳號。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "grant select, reload, lock tables, replication client on *.* to 'backup'@'localhost' identified by 'backup@2015';"))pub_printlog.printlog('info', 'ist_mysql', '增加監控帳號。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "grant process,replication client on *.* to monitor@'localhost' identified by 'monitor@2015';"))#刪除test庫。pub_printlog.printlog('info', 'ist_mysql', '刪除test庫。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "drop database test;"))pub_printlog.printlog('info', 'ist_mysql', '刪除test庫完成。')#修改root帳號名稱。pub_printlog.printlog('info', 'ist_mysql', '修改root帳號名稱。')os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "update mysql.user set user='rootbp' where user='root';"))os.system('''%s/bin/mysql -u root -p'root' -e "%s"''' % (sys.argv[6], "flush privileges;"))pub_printlog.printlog('info', 'ist_mysql', '修改root帳號名稱完成。')#刪除臨時文件pub_printlog.printlog('info', 'ist_mysql', '刪除臨時文件。')os.system('rm -f /root/ist_mysql.sh')pub_printlog.printlog('info', 'ist_mysql', '刪除臨時文件完成。')print "user's privileges done!"pub_printlog.printalllog('ist_mysql', '運行結束。') mysql部署腳本?
轉載于:https://www.cnblogs.com/jl-bai/p/5752617.html
總結
以上是生活随笔為你收集整理的Mysql安装及自动化部署脚本方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ2184 Cow Exhibiti
- 下一篇: PostgreSQL 最佳实践 - 水平