mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz下載安裝


一 ,mysql下載

需要注冊,可以通過組合url越過注冊下載需要的包。
下載地址:
https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

或 wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz

地址:
http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.6/

二, 安裝

如果是centos 7 系統
卸載系統自帶的mariadb
https://downloads.mysql.com/archives/community/

wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.6.47-1.el7.x86_64.rpm-bundle.tar

#   rpm -qa | grep mariadb  
mariadb-libs-5.5.56-2.el7.x86_64

#rpm -e --nodeps  `rpm -qa | grep mariadb `
yum install  -y autoconf
systemctl  start  mysql 
passwd=`cat /root/.mysql_secret  | awk '{print $18}'`
mysql --connect-expired-password -uroot -p"$passwd" -e "SET PASSWORD = PASSWORD('123456');"
mysql -uroot -p123456  -e "GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;"


刪除/etc目錄下的my.cnf
rm /etc/my.cnf

創建用戶
groupadd mysql
useradd -M -g mysql mysql

解壓指定的目錄
tar xvf mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz -C /usr/local/src
ln -sv /usr/local/src/mysql-5.6.45-linux-glibc2.12-x86_64 /usr/local/mysql

copy一份/usr/local/mysql/support-files/下的my-default.cnf文件到/etc下
cp support-files/my-default.cnf /etc/my.cnf

配置/etc目錄下的my.cnf文件

[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8 

[mysqld]
skip-name-resolve
#設置3306端口
port = 3306
# 設置mysql的安裝目錄
basedir=/usr/local/mysql
# 設置mysql數據庫的數據的存放目錄
datadir=/usr/local/mysql/data
# 允許最大連接數
max_connections=200
# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
lower_case_table_name=1
max_allowed_packet=16M


進入安裝mysql軟件目錄,並執行以下命令


[root@localhost mysql]# cd /usr/local/mysql/
[root@localhost mysql]# chown -R mysql:mysql ./ 
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
-bash: ./scripts/mysql_install_db: /usr/bin/perl: 壞的解釋器: 沒有那個文件或目錄
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper
報錯說安裝
yum install autoconf     
yum install   autoconf   需要裝  

安裝必備軟件

 yum -y install perl perl-devel   
yum install -y perl-Data-Dumper    

安裝完成后,修改當前data目錄的擁有者為mysql用戶
data目錄為默認的數據目錄,在解壓后的目錄下。即/usr/local/mysql

chown -R mysql:mysql data

配置權限/my.cnf

chmod 644 /etc/my.cnf

開機自啟動腳本

cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld

增加腳本可執行權限

chmod +x /etc/rc.d/init.d/mysqld

加入到系統服務
chkconfig --add mysqld
檢查服務配置是否生效
chkconfig --list mysqld
```

起停命令
命令為:service mysqld start和service mysqld stop
啟動服務
service mysqld start

寫入環境變量
```
vim /etc/profile                                
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH

source /etc/profile

啟動

[root@localhost mysql]# chkconfig --add mysql  
[root@localhost mysql]# chkconfig mysql on  
[root@localhost mysql]# service mysql start  
Starting MySQL.. SUCCESS!

設置登陸密碼
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'

登陸:
mysql -uroot -p

修改權限使得root可遠程訪問

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 

mysql> FLUSH PRIVILEGES;  

或
update user set password=password('root') where user='root' and host='localhost';

flush privileges;

遠程訪問注意防火牆和selinux

注意:
如果需要修改數據存儲目錄,有2種方式
一是做軟連接至/usr/local/mysql/data
二是修改啟動文件
vim /etc/init.d/mysql #若mysql的安裝目錄是/usr/local/mysql,則可省略此步
修改文件中的兩個變更值
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
注意權限問題

添加用戶后可使用mysql用戶操作
su - mysql

#!/bin/bash
#
#********************************************************************
#Author:		       yon@ 
#Date: 			2019-09-13
#FileName:		mysql-5.6.45-linux-glibc2.12-x86_64-install.sh
#Description:		install  mysql-5.6.45-linux-glibc2.12-x86_6
#Copyright (C): 	2019 All rights reserved
#********************************************************************

##  download url  
##  https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
##  https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz
set  -e 
set  -u
mysql=mysql-5.6.45-linux-glibc2.12-x86_64

#1,clear the  mariadb  
rpm -qa | grep mariadb &&  rpm -e --nodeps   `rpm -qa | grep mariadb` 

#2,remove /etc/my.cnf if exists
 rm /etc/my.cnf   -rf 
 rm  /etc/my.cnf.d -rf 

#3,create user 
groupadd mysql
useradd  -M  -g mysql mysql

#4, 
wget  -O  /usr/local/src/${mysql}.tar.gz   https://dev.mysql.com/get/Downloads/MySQL-5.6/${mysql}.tar.gz
tar xvf   /usr/local/src/${mysql}.tar.gz   -C   /usr/local/src 
ln -sv   /usr/local/src/${mysql}     /usr/local/mysql

#5,

cat  > /etc/my.cnf  <<EOF
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8 

[mysqld]
skip-name-resolve
#設置3306端口
port = 3306
# 設置mysql的安裝目錄
basedir=/usr/local/mysql
# 設置mysql數據庫的數據的存放目錄
datadir=/usr/local/mysql/data
# 允許最大連接數
max_connections=200
# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
lower_case_table_name=1
max_allowed_packet=16M
EOF

chmod 644 /etc/my.cnf

#6,
yum -y install perl perl-devel   
yum install -y perl-Data-Dumper 
yum install  -y  autoconf   libaio


echo "start initialize  db...."
sleep  5
cd /usr/local/mysql/  &&   chown -R mysql:mysql ./ 
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/


#7,
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld

chkconfig --add mysqld
chkconfig mysqld on 

#8,
echo  "export MYSQL_HOME=/usr/local/mysql"   >>/etc/profile
echo  'export PATH=$MYSQL_HOME/bin:$PATH'    >>/etc/profile
source   /etc/profile 

#9,
service mysql start

#10, setup  password  for  root 
echo  "pls run this  to set password for root to remote login"
echo  ""
echo  ""
echo  "/usr/local/mysql/bin/mysqladmin -u root password 'new-password'"
echo  "  mysql -uroot -p"
echo  "mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;" 
echo  "mysql> FLUSH PRIVILEGES;"

echo ""
echo ""
echo ""
echo "systemctl stop/disable  firewalld "
echo "setenforce 0 "



配置文件


# 客戶端設置
[client]
port = 3306
# 默認情況下,socket文件應為/usr/local/mysql/mysql.socket,所以可以ln -s xx  /tmp/mysql.sock
socket = /tmp/mysql.sock 

# 服務端設置
[mysqld]

##########################################################################################################
# 基礎信息
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 1

#服務端口號 默認3306
port = 3306

# 啟動mysql服務進程的用戶
user = mysql

##########################################################################################################
# 安裝目錄相關
# mysql安裝根目錄
basedir = /usr/local/mysql-5.7.21

# mysql數據文件所在位置
datadir = /usr/local/mysql-5.7.21/data

# 臨時目錄 比如load data infile會用到,一般都是使用/tmp
tmpdir  = /tmp

# 設置socke文件地址
socket  = /tmp/mysql.sock


##########################################################################################################
# 事務隔離級別,默認為可重復讀(REPEATABLE-READ)。(此級別下可能參數很多間隙鎖,影響性能,但是修改又影響主從復制及災難恢復,建議還是修改代碼邏輯吧)
# 隔離級別可選項目:READ-UNCOMMITTED  READ-COMMITTED  REPEATABLE-READ  SERIALIZABLE
# transaction_isolation = READ-COMMITTED
transaction_isolation = REPEATABLE-READ

##########################################################################################################
# 數據庫引擎與字符集相關設置

# mysql 5.1 之后,默認引擎就是InnoDB了
default_storage_engine = InnoDB
# 內存臨時表默認引擎,默認InnoDB
default_tmp_storage_engine = InnoDB
# mysql 5.7新增特性,磁盤臨時表默認引擎,默認InnoDB
internal_tmp_disk_storage_engine = InnoDB

#數據庫默認字符集,主流字符集支持一些特殊表情符號(特殊表情符占用4個字節)
character-set-server = utf8

#數據庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server = utf8_general_ci

# 設置client連接mysql時的字符集,防止亂碼
# init_connect='SET NAMES utf8'

# 是否對sql語句大小寫敏感,默認值為0,1表示不敏感
lower_case_table_names = 1


##########################################################################################################
# 數據庫連接相關設置
# 最大連接數,可設最大值16384,一般考慮根據同時在線人數設置一個比較綜合的數字,鑒於該數值增大並不太消耗系統資源,建議直接設10000
# 如果在訪問時經常出現Too Many Connections的錯誤提示,則需要增大該參數值
max_connections = 10000

# 默認值100,最大錯誤連接數,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST
# 考慮高並發場景下的容錯,建議加大。
max_connect_errors = 10000

# MySQL打開的文件描述符限制,默認最小1024;
# 當open_files_limit沒有被配置的時候,比較max_connections*5和ulimit -n的值,哪個大用哪個,
# 當open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。
open_files_limit = 65535

# 注意:仍然可能出現報錯信息Can't create a new thread;此時觀察系統cat /proc/mysql進程號/limits,觀察進程ulimit限制情況
# 過小的話,考慮修改系統配置表,/etc/security/limits.conf和/etc/security/limits.d/90-nproc.conf

# MySQL默認的wait_timeout  值為8個小時, interactive_timeout參數需要同時配置才能生效
# MySQL連接閑置超過一定時間后(單位:秒,此處為1800秒)將會被強行關閉
interactive_timeout = 1800 
wait_timeout = 1800 

# 在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中 
# 官方建議back_log = 50 + (max_connections / 5),封頂數為900
back_log = 900

##########################################################################################################
# 數據庫數據交換設置
# 該參數限制服務器端,接受的數據包大小,如果有BLOB子段,建議增大此值,避免寫入或者更新出錯。有BLOB子段,建議改為1024M
max_allowed_packet = 128M

##########################################################################################################
# 內存,cache與buffer設置


# 內存臨時表的最大值,默認16M,此處設置成128M
tmp_table_size = 64M
# 用戶創建的內存表的大小,默認16M,往往和tmp_table_size一起設置,限制用戶臨師表大小。
# 超限的話,MySQL就會自動地把它轉化為基於磁盤的MyISAM表,存儲在指定的tmpdir目錄下,增大IO壓力,建議內存大,增大該數值。
max_heap_table_size = 64M



# 表示這個mysql版本是否支持查詢緩存。ps:SHOW STATUS LIKE 'qcache%',與緩存相關的狀態變量。
# have_query_cache

# 這個系統變量控制着查詢緩存工能的開啟的關閉,0時表示關閉,1時表示打開,2表示只要select 中明確指定SQL_CACHE才緩存。
# 看業務場景決定是否使用緩存,不使用,下面就不用配置了。
query_cache_type = 0 

# 默認值1M,優點是查詢緩沖可以極大的提高服務器速度, 如果你有大量的相同的查詢並且很少修改表。
# 缺點:在你表經常變化的情況下或者如果你的查詢原文每次都不同,查詢緩沖也許引起性能下降而不是性能提升。
query_cache_size = 64M 

# 只有小於此設定值的結果才會被緩沖,保護查詢緩沖,防止一個極大的結果集將其他所有的查詢結果都覆蓋。
query_cache_limit = 2M

# 每個被緩存的結果集要占用的最小內存,默認值4kb,一般不怎么調整。
# 如果Qcache_free_blocks值過大,可能是query_cache_min_res_unit值過大,應該調小些
# query_cache_min_res_unit的估計值:(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
query_cache_min_res_unit = 4kb

# 在一個事務中binlog為了記錄SQL狀態所持有的cache大小
# 如果你經常使用大的,多聲明的事務,你可以增加此值來獲取更大的性能.
# 所有從事務來的狀態都將被緩沖在binlog緩沖中然后在提交后一次性寫入到binlog中
# 如果事務比此值大, 會使用磁盤上的臨時文件來替代.
# 此緩沖在每個連接的事務第一次更新狀態時被創建
binlog_cache_size = 1M



#*** MyISAM 相關選項
# 指定索引緩沖區的大小, 為MYISAM數據表開啟供線程共享的索引緩存,對INNODB引擎無效。相當影響MyISAM的性能。
# 不要將其設置大於你可用內存的30%,因為一部分內存同樣被OS用來緩沖行數據
# 甚至在你並不使用MyISAM 表的情況下, 你也需要仍舊設置起 8-64M 內存由於它同樣會被內部臨時磁盤表使用.
# 默認值 8M,建議值:對於內存在4GB左右的服務器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!
key_buffer_size = 64M

# 為每個掃描MyISAM的線程分配參數設置的內存大小緩沖區。 
# 默認值128kb,建議值:16G內存建議1M,4G:128kb或者256kb吧
# 注意,該緩沖區是每個連接獨占的,所以總緩沖區大小為 128kb*連接數;極端情況128kb*maxconnectiosns,會超級大,所以要考慮日常平均連接數。
# 一般不需要太關心該數值,稍微增大就可以了,
read_buffer_size = 262144 

# 支持任何存儲引擎
# MySQL的隨機讀緩沖區大小,適當增大,可以提高性能。
# 默認值256kb;建議值:得參考連接數,16G內存,有人推薦8M
# 注意,該緩沖區是每個連接獨占的,所以總緩沖區大小為128kb*連接數;極端情況128kb*maxconnectiosns,會超級大,所以要考慮日常平均連接數。
read_rnd_buffer_size = 1M

# order by或group by時用到 
# 支持所有引擎,innodb和myisam有自己的innodb_sort_buffer_size和myisam_sort_buffer_size設置
# 默認值256kb;建議值:得參考連接數,16G內存,有人推薦8M.
# 注意,該緩沖區是每個連接獨占的,所以總緩沖區大小為 1M*連接數;極端情況1M*maxconnectiosns,會超級大。所以要考慮日常平均連接數。
sort_buffer_size = 1M

# 此緩沖被使用來優化全聯合(full JOINs 不帶索引的聯合)
# 類似的聯合在極大多數情況下有非常糟糕的性能表現,但是將此值設大能夠減輕性能影響.
# 通過 “Select_full_join” 狀態變量查看全聯合的數量
# 注意,該緩沖區是每個連接獨占的,所以總緩沖區大小為 1M*連接數;極端情況1M*maxconnectiosns,會超級大。所以要考慮日常平均連接數。
# 默認值256kb;建議值:16G內存,設置8M.
join_buffer_size = 1M

# 緩存linux文件描述符信息,加快數據文件打開速度
# 它影響myisam表的打開關閉,但是不影響innodb表的打開關閉。
# 默認值2000,建議值:根據狀態變量Opened_tables去設定
table_open_cache = 2000

# 緩存表定義的相關信息,加快讀取表信息速度
# 默認值1400,最大值2000,建議值:基本不改。
table_definition_cache = 1400
# 該參數是myssql 5.6后引入的,目的是提高並發。
# 默認值1,建議值:cpu核數,並且<=16
table_open_cache_instances = 2

# 當客戶端斷開之后,服務器處理此客戶的線程將會緩存起來以響應下一個客戶而不是銷毀。可重用,減小了系統開銷。
# 默認值為9,建議值:兩種取值方式,方式一,根據物理內存,1G  —> 8;2G  —> 16; 3G  —> 32; >3G  —> 64;
# 方式二,根據show status like  'threads%',查看Threads_connected值。
thread_cache_size = 16

# 默認值256k,建議值:16/32G內存,512kb,其他一般不改變,如果報錯:Thread stack overrun,就增大看看,
# 注意,每個線程分配內存空間,所以總內存空間。。。你懂得。
thread_stack = 512k


##########################################################################################################
# 日志文件相關設置,一般只開啟三種日志,錯誤日志,慢查詢日志,二進制日志。普通查詢日志不開啟。

# 普通查詢日志,默認值off,不開啟
general_log = 0
# 普通查詢日志存放地址
general_log_file = /usr/local/mysql-5.7.21/log/mysql-general.log

# 全局動態變量,默認3,范圍:1~3
# 表示錯誤日志記錄的信息,1:只記錄error信息;2:記錄error和warnings信息;3:記錄error、warnings和普通的notes信息。
log_error_verbosity = 2
# 錯誤日志文件地址
log_error = /usr/local/mysql-5.7.21/log/mysql-error.log


# 開啟慢查詢
slow_query_log = 1

# 開啟慢查詢時間,此處為1秒,達到此值才記錄數據
long_query_time = 3

# 檢索行數達到此數值,才記錄慢查詢日志中
min_examined_row_limit = 100

# mysql 5.6.5新增,用來表示每分鍾允許記錄到slow log的且未使用索引的SQL語句次數,默認值為0,不限制。
log_throttle_queries_not_using_indexes = 0

# 慢查詢日志文件地址
slow_query_log_file = /usr/local/mysql-5.7.21/log/mysql-slow.log

# 開啟記錄沒有使用索引查詢語句
log-queries-not-using-indexes = 1


# 開啟二進制日志
log_bin = /usr/local/mysql-5.7.21/log/mysql-bin.log
# mysql清除過期日志的時間,默認值0,不自動清理,而是使用滾動循環的方式。
expire_logs_days = 0
# 如果二進制日志寫入的內容超出給定值,日志就會發生滾動。你不能將該變量設置為大於1GB或小於4096字節。 默認值是1GB。
max_binlog_size = 1000M
# binlog的格式也有三種:STATEMENT,ROW,MIXED。mysql 5.7.7后,默認值從 MIXED 改為 ROW
# 關於binlog日志格式問題,請查閱網絡資料
binlog_format = row
# 默認值N=1,使binlog在每N次binlog寫入后與硬盤同步,ps:1最慢
# sync_binlog = 1 

##########################################################################################################
# innodb選項

# 說明:該參數可以提升擴展性和刷臟頁性能。
# 默認值1,建議值:4-8;並且必須小於innodb_buffer_pool_instances
innodb_page_cleaners = 4

# 說明:一般8k和16k中選擇,8k的話,cpu消耗小些,selcet效率高一點,一般不用改
# 默認值:16k;建議值:不改,
innodb_page_size = 16384

# 說明:InnoDB使用一個緩沖池來保存索引和原始數據, 不像MyISAM.這里你設置越大,你在存取表里面數據時所需要的磁盤I/O越少.
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的60%-80%
# 注意別設置的過大,會導致system的swap空間被占用,導致操作系統變慢,從而減低sql查詢的效率
# 默認值:128M,建議值:物理內存的60%-80%
innodb_buffer_pool_size = 512M

# 說明:只有當設置 innodb_buffer_pool_size 值大於1G時才有意義,小於1G,instances默認為1,大於1G,instances默認為8
# 但是網絡上有評價,最佳性能,每個實例至少1G大小。
# 默認值:1或8,建議值:innodb_buffer_pool_size/innodb_buffer_pool_instances >= 1G
innodb_buffer_pool_instances = 1

# 說明:mysql 5.7 新特性,defines the chunk size for online InnoDB buffer pool resizing operations.
# 實際緩沖區大小必須為innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances*倍數,取略大於innodb_buffer_pool_size
# 默認值128M,建議值:默認值就好,亂改反而容易出問題,它會影響實際buffer pool大小。
innodb_buffer_pool_chunk_size = 128M 

# 在啟動時把熱數據加載到內存。默認值為on,不修改
innodb_buffer_pool_load_at_startup = 1
# 在關閉時把熱數據dump到本地磁盤。默認值為on,不修改
innodb_buffer_pool_dump_at_shutdown = 1

# 說明:影響Innodb緩沖區的刷新算法,建議從小到大配置,直到zero free pages;innodb_lru_scan_depth * innodb_buffer_pool_instances defines the amount of work performed by the page cleaner thread each second.
# 默認值1024,建議值: 未知
innodb_lru_scan_depth = 1024

# 說明:事務等待獲取資源等待的最長時間,單位為秒,看具體業務情況,一般默認值就好
# 默認值:50,建議值:看業務。
innodb_lock_wait_timeout = 60

# 說明:設置了Mysql后台任務(例如頁刷新和merge dadta from buffer pool)每秒io操作的上限。
# 默認值:200,建議值:方法一,單盤sata設100,sas10,raid10設200,ssd設2000,fushion-io設50000;方法二,通過測試工具獲得磁盤io性能后,設置IOPS數值/2。
innodb_io_capacity = 2000
# 說明:該參數是所有緩沖區線程io操作的總上限。
# 默認值:innodb_io_capacity的兩倍。建議值:例如用iometer測試后的iops數值就好
innodb_io_capacity_max = 4000

# 說明:控制着innodb數據文件及redo log的打開、刷寫模式,三種模式:fdatasync(默認),O_DSYNC,O_DIRECT
# fdatasync:數據文件,buffer pool->os buffer->磁盤;日志文件,buffer pool->os buffer->磁盤;
# O_DSYNC:  數據文件,buffer pool->os buffer->磁盤;日志文件,buffer pool->磁盤;
# O_DIRECT: 數據文件,buffer pool->磁盤;           日志文件,buffer pool->os buffer->磁盤;
# 默認值為空,建議值:使用SAN或者raid,建議用O_DIRECT,不懂測試的話,默認生產上使用O_DIRECT
innodb_flush_method = O_DIRECT


# 說明:mysql5.7之后默認開啟,意思是,每張表一個獨立表空間。
# 默認值1,開啟
innodb_file_per_table = 1

# 說明:The path where InnoDB creates undo tablespaces.通常等於undo log文件的存放目錄。
# 默認值./;自行設置
innodb_undo_directory = /usr/local/mysql-5.7.21/log
# 說明:The number of undo tablespaces used by InnoDB.等於undo log文件數量。5.7.21后開始棄用
# 默認值為0,建議默認值就好,不用調整了。
innodb_undo_tablespaces = 0
# 說明:定義undo使用的回滾段數量。5.7.19后棄用
# 默認值128,建議不動,以后棄用了。
innodb_undo_logs = 128
# 說明:5.7.5后開始使用,在線收縮undo log使用的空間。
# 默認值:關閉,建議值:開啟
innodb_undo_log_truncate = 1
# 說明:結合innodb_undo_log_truncate,實現undo空間收縮功能
# 默認值:1G,建議值,不改。
innodb_max_undo_log_size = 1G

# 說明:重作日志文件的存放目錄
innodb_log_group_home_dir = /usr/local/mysql-5.7.21/log
# 說明:日志文件的大小
# 默認值:48M,建議值:根據你系統的磁盤空間和日志增長情況調整大小
innodb_log_file_size = 128M
# 說明:日志組中的文件數量,mysql以循環方式寫入日志
# 默認值2,建議值:根據你系統的磁盤空間和日志增長情況調整大小
innodb_log_files_in_group = 3
# 此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據。MySQL開發人員建議設置為1-8M之間
innodb_log_buffer_size = 16M



# 說明:可以控制log從系統buffer刷入磁盤文件的刷新頻率,增大可減輕系統負荷
# 默認值是1;建議值不改。系統性能一般夠用。
innodb_flush_log_at_timeout = 1
# 說明:參數可設為0,1,2;
# 參數0:表示每秒將log buffer內容刷新到系統buffer中,再調用系統flush操作寫入磁盤文件。
# 參數1:表示每次事物提交,將log buffer內容刷新到系統buffer中,再調用系統flush操作寫入磁盤文件。
# 參數2:表示每次事物提交,將log buffer內容刷新到系統buffer中,隔1秒后再調用系統flush操作寫入磁盤文件。
innodb_flush_log_at_trx_commit = 1


# 說明:限制Innodb能打開的表的數據,如果庫里的表特別多的情況,請增加這個。
# 值默認是2000,建議值:參考數據庫表總數再進行調整,一般夠用不用調整。
innodb_open_files = 8192

# innodb處理io讀寫的后台並發線程數量,根據cpu核來確認,取值范圍:1-64
# 默認值:4,建議值:與邏輯cpu數量的一半保持一致。
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# 默認設置為 0,表示不限制並發數,這里推薦設置為0,更好去發揮CPU多核處理能力,提高並發量
innodb_thread_concurrency = 0
# 默認值為4,建議不變。InnoDB中的清除操作是一類定期回收無用數據的操作。mysql 5.5之后,支持多線程清除操作。
innodb_purge_threads = 4 

# 說明:mysql緩沖區分為new blocks和old blocks;此參數表示old blocks占比;
# 默認值:37,建議值,一般不動
innodb_old_blocks_pct = 37
# 說明:新數據被載入緩沖池,進入old pages鏈區,當1秒后再次訪問,則提升進入new pages鏈區。
# 默認值:1000
innodb_old_blocks_time=1000
# 說明:開啟異步io,可以提高並發性,默認開啟。
# 默認值為1,建議不動
innodb_use_native_aio = 1

# 說明:默認為空,使用data目錄,一般不改。
innodb_data_home_dir=/usr/local/mysql-5.7.21/data
# 說明:Defines the name, size, and attributes of InnoDB system tablespace data files.
# 默認值,不指定,默認為ibdata1:12M:autoextend
innodb_data_file_path = ibdata1:12M:autoextend


# 說明:設置了InnoDB存儲引擎用來存放數據字典信息以及一些內部數據結構的內存空間大小,除非你的數據對象及其多,否則一般默認不改。
# innodb_additional_mem_pool_size = 16M


# 說明:The crash recovery mode。只有緊急情況需要恢復數據的時候,才改為大於1-6之間數值,含義查下官網。
# 默認值為0;
#innodb_force_recovery = 0

##########################################################################################################
# 其他。。。。
# 參考http://www.kuqin.com/database/20120815/328905.html
# skip-external-locking

# 禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。
# 缺點:所有遠程主機連接授權都要使用IP地址方式,因為只認得ip地址了。
# skip_name_resolve = 0

# 默認值為off,timestamp列會自動更新為當前時間,設置為on|1,timestamp列的值就要顯式更新
explicit_defaults_for_timestamp = 1




[mysqldump]
# quick選項強制 mysqldump 從服務器查詢取得記錄直接輸出而不是取得所有記錄后將它們緩存到內存中
quick
max_allowed_packet = 16M

[mysql]
# mysql命令行工具不使用自動補全功能,建議還是改為
# no-auto-rehash
auto-rehash
socket = /tmp/mysql.sock


四,使用普通用戶啟動

下載解壓包后:
刪除系統默認的mariadb 包

 rpm -e --nodeps  `rpm -qa | grep mariadb `

普通用戶下初始化數據庫
進入解壓后的根目錄:
./scripts/mysql_install_db   --user=xxxx  --basedir=/home/ap/xxxx/mysql  --datadir=/home/ap/xxxx/mysql/data/   

初始失敗,需要安裝包如autoconf 等

sudo   yum  install  autoconf    -y 

然后執行:
./scripts/mysql_install_db   --user=xxxx  --basedir=/home/ap/xxxx/mysql  --datadir=/home/ap/xxxx/mysql/data/   


export MYSQL_HOME=/home/ap/xxxx/mysql
export PATH=$MYSQL_HOME/bin:$PATH


# 1,直接啟動,默認使用的是根目錄下的配置文件 my.cnf 
/home/ap/xxxx/mysql/bin/mysqld_safe &


 
#2, 先修改根目錄下配置文件為:
cat  my.cnf 
[client]   
port=3306  
socket=/home/ap/xxxx/mysql/mysql.sock  

[mysqld]
port=3306
basedir=/home/ap/xxxx/mysql
datadir=/home/ap/xxxx/mysql/data
pid-file=/home/ap/xxxx/mysql/mysql.pid
socket=/home/ap/xxxx/mysql/mysql.sock
log_error=/home/ap/xxxx/mysql/error.log
server-id=100
user=xxxx
bind-address = 0.0.0.0
skip-name-resolve

然后啟動:
/home/ap/xxxx/mysql/bin/mysqld_safe &  

登錄后發現沒有權限操作:
使用root用戶登錄:
mysql -uroot   

授權:
GRANT ALL PRIVILEGES ON *.* TO   'xxxx'@'%' ;
GRANT ALL PRIVILEGES ON *.* TO   'xxxx'@’localhost' ;
設置密碼(方式1):
格式:mysql> set password for 用戶名@localhost = password('新密碼'); 
例子:mysql> set password for root@localhost = password('123'); 

FLUSH PRIVILEGES; 

設置密碼方式:
方法2:用mysqladmin 
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼 
例子:mysqladmin -uroot -p123456 password 123 

方法3:用UPDATE直接編輯user表 
首先登錄MySQL。 
mysql> use mysql; 
mysql> update user set password=password('123') where user='root' and host='localhost'; 


一些操作:

查看用戶權限
mysql> show grants for xxxx;
賦予權限
mysql> grant select on *.*  to xxxx;
回收權限
mysql> revoke  select on *.*  from   root;  //如果權限不存在會報錯

grant  all   on *.*   to  xxxx@'localhost' ;
grant  all   on *.*   to   xxxx@'%'  ;




查看當前連接數 
mysql> show full processlist ;
mysql>  status ;


忘記密碼:
1,關閉mysql 服務
2,mysqld --skip-grant-tables 回車
3,輸入mysql回車,如果成功,將出現MySQL提示符 >。
4,連接權限數據庫: use mysql; 。
5,改密碼:update user set password=password("123") where user="root";(別忘了最后加分號) 。
6,刷新權限(必須步驟):flush privileges;
7,退出 quit
8,重新啟動服務

##以下可以不操作,如果可以使用系統服務自動起來
####------------------------------------------------------------------------------------------------- 
##
##  使用root 操作, 采用系統服務控制,開機自啟動
#####
配置my.cnf
 cat  /etc/my.cnf 
[client]   
port=3306  
socket=/home/ap/xxxx/mysql/mysql.sock  

[mysqld]
port=3306
basedir=/home/ap/xxxx/mysql
datadir=/home/ap/xxxx/mysql/data
pid-file=/home/ap/xxxx/mysql/mysql.pid
socket=/home/ap/xxxx/mysql/mysql.sock
log_error=/home/ap/xxxx/mysql/error.log
server-id=100
user=xxxx
bind-address = 0.0.0.0
skip-name-resolve


添加系統服務:
## mysqld  里面也可修改
## basedir=/home/ap/xxxx/mysql
## datadir=/home/ap/xxxx/mysql/data
cp    support-files/mysql.server   /etc/rc.d/init.d/mysqld

chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld  on 
chkconfig --list mysqld


訪問
bin/mysql  -uxxxx  
如果報sock 錯誤  ,在/etc/my.cnf  下修改
[client]   
port=3306  
socket=/home/ap/xxxx/mysql/mysql.sock     指定sock位置


添加環境變量
export  PATH=/home/ap/xxxx/mysql/bin:$PATH


mysql  啟動時先在basedir 下尋找 my.cnf  如果沒有則在/etc/my.cnf  下查找

創建用戶並授權

#新建用戶:

命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

例子: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';

        CREATE USER 'dog2'@'localhost' IDENTIFIED BY '';


#授權
GRANT   privileges   ON databasename.tablename TO 'username'@'host'

例: GRANT SELECT, INSERT ON mq.* TO 'dog'@'localhost';

#創建用戶並授權(測試不行)

grant all privileges on mq.* to test@localhost identified by '1234';
必須執行flush privileges; 


##更改密碼
SET PASSWORD FOR 'zx'@'localhost' = PASSWORD("xxx");

##撤銷權限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';

##刪除用戶

DROP USER 'username'@'host';

##查看用戶授權
 show grants  for 'redhat'@'%'  \G ;

普通用戶安裝mysql

不用安裝任何依賴(有點麻煩)
mysql-5.6.30-linux-glibc2.5-x86_64

1,家目錄下解壓並修改名稱

[xxxx@wn10aimapap1001 mysql]$ pwd
/home/ap/xxxx/mysql
[xxxx@wn10aimapap1001 mysql]$ echo $HOME
/home/ap/xxxx
[xxxx@wn10aimapap1001 mysql]$ ll
total 68
-rw-r--r--  1 xxxx xxxx 17987 Mar  3  2016 COPYING
-rw-r--r--  1 xxxx xxxx  2496 Mar  3  2016 README
drwxrwxr-x  2 xxxx xxxx  4096 Dec 24 13:32 bin
drwxrwxr-x  4 xxxx xxxx   134 Dec 24 14:19 data
drwxrwxr-x  2 xxxx xxxx    77 Dec 24 13:32 docs
-rw-rw----  1 xxxx xxxx  8586 Dec 24 13:53 error.log
drwxrwxr-x  3 xxxx xxxx  4096 Dec 24 13:32 include
drwxrwxr-x  3 xxxx xxxx  4096 Dec 24 13:32 lib
drwxrwxr-x  3 xxxx xxxx    20 Dec 24 14:00 lock
drwxrwxr-x  2 xxxx xxxx    21 Dec 24 14:08 log
drwxrwxr-x  4 xxxx xxxx    30 Dec 24 13:32 man
-rw-r--r--  1 xxxx xxxx  1305 Dec 24 14:23 my.cnf
drwxrwxr-x 10 xxxx xxxx  4096 Dec 24 13:32 mysql-test
-rw-rw----  1 xxxx xxxx     6 Dec 24 14:19 pid
drwxrwxr-x  2 xxxx xxxx    20 Dec 24 14:17 script
drwxrwxr-x  2 xxxx xxxx    30 Dec 24 13:32 scripts
drwxrwxr-x 28 xxxx xxxx  4096 Dec 24 13:32 share
drwxrwxr-x  4 xxxx xxxx  4096 Dec 24 13:32 sql-bench
drwxrwxr-x  2 xxxx xxxx   136 Dec 24 13:32 support-files

2,移除data目錄數據
rm -rf data/*

3,拷貝配置文件
cp support-files/my-default.cnf my.cnf

4,新建一個script目錄作為啟動腳本目錄,拷貝啟動腳本
mkdir script
cp support-files/mysql.server script/mysqld

5,修改script/mysqld啟動配置

  6.1 修改basedir

    basedir=/home/test/mysql

  6.2 修改datadir

    datadir=/home/test/mysql/data

  6.3 修改lock目錄

    mkdir -p lock/subsys
    mkdir  log
    lockdir='/home/test/mysql/lock/subsys'

  6.4 修改進程id目錄

    mysqld_pid_file_path=/home/test/mysql/pid

  6.5 修改啟動參數

    other_args="--basedir=/home/test/mysql --log-error=/home/test/mysql/log/log --socket=/home/test/mysql/data/mysql.socket --ledir=/home/test/mysql/bin --user=test --skip-grant-tables"

#########################################################################
整體配置文件  vi  script/mysqld
basedir=/home/ap/xxxx/mysql
datadir=/home/ap/xxxx/mysql/data
lockdir='/home/ap/xxxx/mysql/lock/subsys'
mysqld_pid_file_path=/home/ap/xxxx/mysql/pid

#先添加--skip-grant-tables 修改完密碼后去掉
other_args="--basedir=/home/ap/xxxx/mysql --log-error=/home/ap/xxxx/mysql/log/log --socket=/home/ap/xxxx/mysql/data/mysql.socket --ledir=/home/ap/xxxx/mysql/bin --user=xxxx "


6,mkdir log
mkdir data/mysql

7,修改my.cnf配置文件

[mysql]
port = 3306
socket = /home/ap/xxxx/mysql/data/mysql.socket
[mysqld]
socket = /home/ap/xxxx/mysql/data/mysql.socket
basedir = /home/ap/xxxx/mysql
datadir = /home/ap/xxxx/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

8、配置已經完成,可以啟動mysql了。進入script

./mysqld start

9、客戶端登錄

./mysql -uroot -proot -S data/mysql.socket

10、將mysql庫中對應的表和數據更新到mysql數據庫中
create database mysql ;
use mysql
source share/mysql_system_tables.sql
source share/mysql_system_tables_data.sql

沒有簡化的簡化腳本,script/mysqld 需要手動更改操作

#! /bin/bash
## 離線安裝mysql,不需要任何依賴
##

mysql_package="mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz"
mysql_version="mysql-5.6.30-linux-glibc2.5-x86_64"
mysql_package_path="/home/ap/xxxx/app_temp"
#需要配置
mysql_path="/home/ap/xxxx"
mysql_install_path=${mysql_path}/mysql
user="xxxx"

##需要創建的目錄
lock=${mysql_install_path}/lock/subsys
log=${mysql_install_path}/log
mysql=${mysql_install_path}/

##啟動腳本需要的目錄
basedir=${mysql_install_path}
datadir=${mysql_install_path}/data
lockdir=${lock}
mysqld_pid_file_path=${mysql_install_path}/pid
other_args="--basedir=${mysql_install_path} --log-error=${mysql_install_path}/log/log --socket=${mysql_install_path}/data/mysql.socket --ledir=${mysql_install_path}/bin --user=${user} --skip-grant-tables"
other_args1="--basedir=${mysql_install_path} --log-error=${mysql_install_path}/log/log --socket=${mysql_install_path}/data/mysql.socket --ledir=${mysql_install_path}/bin --user=${user} "


##啟動配置文件
socket=${mysql_install_path}/data/mysql.socket



##執行操作
installmysql(){
    if [ ! -d ${mysql_install_path} ];then
        tar  xvf  ${mysql_package_path}/${mysql_package}   -C ${mysql_path}
        ln  -s    ${mysql_path}/${mysql_version}   ${mysql_install_path}
        rm  -rf  ${datadir}/*
        mkdir -p ${mysql_install_path}/script
        mkdir -p ${mysql_install_path}/log
        mkdir -p ${mysql_install_path}/data/mysql
        mkdir -p ${mysql_install_path}/lock/subsys
        cp  ${mysql_install_path}/support-files/mysql.server  ${mysql_install_path}/script/mysqld
cat >> ${mysql_install_path}/my.cnf  <<EOF
[mysql]
port = 3306
socket = ${socket}
[mysqld]
socket = ${socket}
basedir = ${basedir}
datadir = ${datadir}
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

EOF



     else
           echo "dir  has  exists!"
     fi

}



installmysql

echo  "-----------------------------------"
echo  "need to  modify the  config:  script/mysqld"
echo  "sed  -i  's###' script/mysqld"
echo  "s#basedir=#basedir=${basedir}#"
echo  "s#datadir=#datadir=${datadir}#"
echo  "s#lockdir='/var/lock/subsys'#lockdir=${lock}#"
echo  "s#mysqld_pid_file_path=#mysqld_pid_file_path=${mysqld_pid_file_path}#"
echo  "s#'other_args="\$*"'#other_args="${other_args}"#"

echo  "-----------------------------------"
echo  ""
echo  ""
echo "start: cd  ${mysql_install_path}"
echo "./script/mysqld  start"

多余

數據目錄 /var/lib/mysql/

容器外執行命令
#!/bin/bash
DOCKER_ID=62f3f40ab240
sudo docker exec -it $DOCKER_ID /bin/bash -c 'cd /packages/detectron && python tools/train.py'
#mysql 8.0.12
create user 'test'@'%' identified by 'test';
grant all privileges on  *.* to 'test'@'%'; 

MySQL 8.0報錯:error 2059: Authentication plugin 'caching_sha2_password' cannot be loaded

二進制mysql

tar -xvzf  
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql .
chgrp -R mysql .

chown   -R  mysql.mysql   mariadb  mariadb-10.2.26-linux-x86_64

 ./scripts/mysql_install_db  --datadir=path  --user=user_name  
 
bin/mysqld_safe --user=mysql



####MySQL.7 
cd /
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local
mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
groupadd mysql
useradd -r -g mysql mysql
mkdir -p  /data/mysql
chown mysql:mysql -R /data/mysql

cat > /etc/my.cnf << EOF
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
EOF

cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# start mysql
/etc/init.d/mysql start

# 用shell取出默認密碼並修改
Mysql_passwd=$(grep password /data/mysql/mysql.err | awk '{print $11}'  | egrep -v "NO|YES")

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
mysql --connect-expired-password -uroot -p"$Mysql_passwd" -e "alter user 'root'@'localhost' identified by 'xxxxx';"


數據庫路徑

show global variables like "%datadir%";
show global variables like "%log%";

容器使用數據庫

#只掛載數據卷到實體機
docker run -d   --restart=always  -p 3306:3306  -v /home/test/data:/var/lib/mysql/  -e MYSQL_ROOT_PASSWORD=123456  mysql:5.6

mysql5.7


#未測試
docker run -p 3306:3306 --name mysql5.7 -v /Volumes/data/develop/mysql/5.7/logs:/var/log/mysql -v /Volumes/data/develop/mysql/5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -e TZ='Asia/Shanghai' -d mysql:5.7 --lower_case_table_names=1


grant all privileges on *.* to root@"%" identified by "chbigdata" with grant option;
flush privileges; 

幫助:
https://hub.docker.com/_/mysql/


免責聲明!

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



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