一.簡介
資料庫(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.index
skip-external-locking
back_log = 50
skip-name-resolve
max_connections =2500
max_connect_errors = 1000
auto-increment-increment = 2
auto-increment-offset = 1
table_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 = 4
default-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 = 1
myisam_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 = 8
innodb_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 [email protected] 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_printlog
SHELLSTRING = '''
#!/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
MUL
cd %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_auth
MUL
#将資料目錄的屬主更改為mysql,否則會導緻資料初始化失敗
chown -R mysql.mysql /mysql/
./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql &
sleep 180
ls %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
MUL
source /etc/profile
#修改檔案屬主及權限
chown mysql.mysql /etc/my.cnf
chmod 644 /etc/my.cnf
cp %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 '[email protected]';"))
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 '[email protected]';"))
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 '[email protected]';"))
#删除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