1、安裝mysql的三種方式mysql
安裝 Percona 分支版本的 MySQL。性能超越標準的 MySQL。linux
上傳解壓
首先安裝 cmake
yum –y install cmake //也須要安裝 gcc-c++,openssl openssl-devel。
前面已經安裝。
cd /usr/local/src/
mkdir mysql
cd mysql /
rz 上傳安裝包
tar -xvf Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
rpm -ivh Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm –ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm
安裝順序:rpm 包不少,只需安裝 debuginfo 、shared、client、serverc++
安裝目錄
配置文件路徑 /etc/my.cnf
注意:安裝完成後,會將配置文件放在 etc 目錄下
vi /etc/my.cnf
數據文件路徑:/var/lib/mysql
5.3.3 啓動服務
service mysql start //自動安裝到它本身制定的目錄下,註冊服務爲 mysql
service mysql status
service mysql stop
配置開機啓動:
chkconfig --list //展示開機的服務
5.3.4 修改 root 密碼
默認沒有密碼不安全:
mysqladmin –u root password "root"
Warning 警告提示,忽略便可。
登陸:
mysql –uroot –proot
已經有密碼進行修改
mysql> use mysql;
mysql> update user set password=PASSWORD('root') where user='root';
mysql> flush privileges;
5.3.5 驗證是否成功安裝
use mysql //打開 mysql 數據庫
show tables //查看 mysql 數據庫下的表
注意:Percona 安裝和 mysql 正式版的安裝,在依賴上有區別。
5.3.6 打開 3306 端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save #修改生效
/etc/init.d/iptables status #查看配置
5.3.7 執行數據庫的腳本
建立庫和數據庫表及數據
mysql>use jtdb;
mysql>set names utf8; #防止亂碼
mysql>source jtdb.sql;
5.3.8 拓展:如何快速導入大數據庫備份文件
導入 sql 文件很是慢的問題
查看目標數據庫的參數
#客戶端/服務器之間通訊的緩衝區的最大大小
show variables like 'max_allowed_packet';
#TCP/IP 和套接字通訊緩衝區大小,建立長度達 net_buffer_length 行
show variables like 'net_buffer_length';
導出 sql 文件時指定參數
mysqldump -uroot -p 數 據 庫 名 -e --max_allowed_packet=4194304
--net_buffer_length=16384 > sql 文件路徑
導入 sql 文件
use 目標數據庫
source /usr/local/src/lotteryanalysis.sql
5.3.9 查看有多少表,每張表有多少記錄
mysql 5.6 中的 information schema,就是存儲了不少數據庫的元數據,其實不少可
以用來作數據庫的性能查詢用。
USE information_schema;
SELECT table_name,table_rows FROM TABLES
WHERE TABLE_SCHEMA = 'jtdb'
ORDER BY table_rows DESC;
注意: 1 mysql 內部緣由,統計不許確
5.3.10 開啓 MYSQL 遠程訪問權限
語法:
grant [權限] on [數據庫名].[表名] to ['用戶名']@['web 服務器的 ip 地址']
identified by ['密碼'];
grant all on *.* to 'root'@'%' identified by 'root';
或者指定 IP 地址
grant all on *.* to 'root'@'192.168.1.103' identified by 'root';
1
5.3.11 安裝第二臺 MYSQL 服務器
上 傳 Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar 到
/usr/local/src/mysql 解壓後造成 7 個 rpm 包。
複製第一臺的虛擬機,按上面配置後,開放端口,配置遠程訪問權限。
4 5.4 常見問題
5.4.1 PID file could not be found
mysql 沒法啓動 ERROR! MySQL is running but PID file could not be found ?
Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock'
解決辦法:
ps aux | grep mysql
kill -9 pid1 pid2 #pid1,pid2 爲具體的查詢出來的端口
service mysql start 或者 /etc/init.d/mysql start
5.4.2 提示 uuid 重複
因爲 data 拷貝是全目錄拷貝,將/var/lib/mysql/auto.cnf 也拷貝,它裏面記錄了
對數據庫的一個 uuid 標識,隨便產生個新的 uuid,替換掉新目錄中的 auto.cnf 中的 uuid
串便可。
能夠用 select uuid()來產生新值,手工黏貼到 auto.cnf 文件中。
5.4.3 The server quit without updating PID file
Starting MySQL...The server quit without updating PID file
(/usr/local/mysql/data/snsgou.pid)
問題可能的緣由有多種,具體什麼緣由最好的辦法是先查看下錯誤日誌:
一、多是/usr/local/mysql/data/mysql.pid 文件沒有寫的權限
解決方法 :給予權限,執行 「chown -R mysql:mysql /var/data」 「chmod -R 755
/usr/local/mysql/data」 而後從新啓動 mysqld!
二、可能進程裏已經存在 mysql 進程
解決方法:用命令「ps -ef|grep mysqld」查看是否有 mysqld 進程,若是有使用「kill
-9 進程號」殺死,而後從新啓動 mysqld!
三、多是第二次在機器上安裝 mysql,有殘餘數據影響了服務的啓動。
解決方法:去 mysql 的數據目錄/data 看看,若是存在 mysql-bin.index,就趕快把
它刪除掉吧,它就是罪魁禍首了。本人就是使用第三條方法解決的 !
四、mysql 在啓動時沒有指定配置文件時會使用/etc/my.cnf 配置文件,請打開這個文
件查看在[mysqld]節下有沒有指定數據目錄(datadir)。
解決方法:請在[mysqld]下設置這一行:datadir = /usr/local/mysql/data
五、skip-federated 字段問題
解決方法:檢查一下/etc/my.cnf 文件中有沒有沒被註釋掉的 skip-federated 字段,
若是有就當即註釋掉吧。
六、錯誤日誌目錄不存在
解決方法:使用「chown」 「chmod」命令賦予 mysql 全部者及權限
七、selinux 惹的禍,若是是 centos 系統,默認會開啓 selinux
解決方法:關閉它,打開/etc/selinux/config,把 SELINUX=enforcing 改成
SELINUX=disabled 後存盤退出重啓機器試試。
5 5.5 主從複製 x Linux 版本
5.5.1 配置主服務器
編輯主 master 服務器配置文件/etc/my.cnf
在[mysqld]節點下加入兩句話
server-id=1
log-bin=mysql-bin #啓用二進制日誌;
重啓服務:service mysql restart
登陸 mysql:mysql –uroot -proot
mysql>flush tables with read lock; #數據庫鎖表,不讓寫數據
mysql>show master status; #查看 MASTER 狀態(這兩個值 File 和 Position)
mysql>unlock tables; #從啓動好後,記得要解除鎖定
5.5.2 配置從服務器
修改/etc/my.cnf 增長一行
server-id=2
重啓服務
service mysql restart
經過 mysql 命令配置同步日誌的指向:
change master to master_host='192.168.170.43', master_port=3306,
master_user='root',master_password='root',
master_log_file='mysql-bin.000007',
master_log_pos=609;
master_host 主服務器的 IP 地址
master_port 主服務器的 PORT 端口
master_log_file 和主服務器 show master status 中的 File 字段值相同
master_log_pos 和主服務器 show master status 中的 Position 字段值相同
5.5.3 啓動從服務
start slave; #stop slave;中止服務,出錯時先中止,再從新配置
show slave status\G; #查看 SLAVE 狀態,\G 結果縱向顯示。必須大寫
service mysql restart #重啓服務
注意:若是出錯,能夠看後面的錯誤信息。觀察 Slave_SQL_Running_State 字段,
它會記錄詳細的錯誤信息。若是正常,上面兩個線程執行都應該是 YES。這樣當主庫建立數
據庫、建立表、插入數據時,從庫都會馬上同步,這樣就實現了主從複製。
5.5.4 擴展:同步日誌
binlog 基本定義:二進制日誌,記錄對數據發生或潛在發生更改的 SQL 語句,並以二
進制的形式保存到磁盤中。
做用:能夠用來查看數據庫的變動歷史(具體的時間點全部的 SQL 操做)、數據庫增量
備份和恢復(增量備份和局域時間點的恢復)、MySQL 的複製(主主數據庫的複製、主從數
據庫的複製)
二進制日誌的信息:
1)文件位置:默認存放位置爲數據庫文件所在目錄下 /var/lib/mysql
2)文件的命名方式:名稱爲 hostname-bin.xxxxx (重啓 mysql 一次將會自動生成
一個新的 binlog)
3)狀態的查看
mysql> show variables like '%log_bin%';
保存日誌的格式是二進制不能直接查看,必須藉助命令行工具才能閱讀。mysql 自帶了
mysqlbinlog 工具,通常放置在 mysql 安裝目錄下的 bin 目錄下執行
mysqlbinlog mysql-bin.000001
後面那個參數是日誌文件,日誌文件通常放在 mysql 的數據庫存儲文件目錄下,以配
置文件 log-bin 的值爲文件名,一串 000001 這樣的數字爲擴展名。
拓展:從庫只讀主從複製還能夠進行嗎?
6 5.6 一主兩從
5.6.1 一主多從
這種方案好處是對主的影響最小,但缺點是越日後的同步的時間越久。
注意:這兩種方式的同步都會有時間差,在很是大的併發下,同步的時間差就會暴漏出
來,致使可能查詢的數據讀到髒數據。
因此最終解決方案應該是分佈式。
5.6.2 主從從鏈條
這種結構不行。第二個從配置爲第一個從的子節點。目的是,主修改數據,從 1 數據隨
主修改,從 2 數據隨從 1 修改。但實際中是實現不了的。現象爲主修改,從 1 修改,從 2
不變。從 1 修改,從 2 才修改。
5.6.3 分佈式數據庫系統的優勢
下降費用。分佈式數據庫在地理上能夠式分佈的。其系統的結構符合這種分佈的要求。
容許用戶在本身的本地錄用、查詢、維護等操做,實行局部控制,下降通訊代價,避免集中
式須要更高要求的硬件設備。並且分佈式數據庫在單臺機器上面數據量較少,其響應速度明
顯提高。
提升系統總體可用性。避免了由於單臺數據庫的故障而形成所有癱瘓的後果。
易於擴展處理能力和系統規模。分佈式數據庫系統的結構能夠很容易地擴展系統,在分
布式數據庫中增長一個新的節點,不影響現有系統的正常運行。這種方式比擴大集中式系統
要靈活經濟。在集中式系統中擴大系統和系統升級,因爲有硬件不兼容和軟件改變困難等缺
點,升級的代價經常是昂貴和不可行的。
微信開源 PhxSQL
PhxSQL 是一個兼容 MySQL、服務高可用、數據強一致的關係型數據庫集羣。PhxSQL 以
單 Master 多 Slave 方式部署,在集羣內超過一半機器存活的狀況下,可自身實現自動
Master 切換,且保證數據一致性。PhxSQL 基於 Percona 5.6 開發。Percona 是 MySQL
的一個分支,功能和實現與 MySQL 基本一致。
5.6.4 配置步驟
1) 主從複製時,只需把從 slave01 複製一下便可,變成從 slave02。無需修改
server-id,無需修改 auto.cnf。
2) 修改配置文件
a)dbServer.xml
增長一個 dbServer 節點:
<dbServer name="slave02" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.19.41</property>
</factoryConfig>
</dbServer>
修改 multiPool 配置
<dbServer name="multiPool" virtual="true">
<poolConfig
class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED ,
3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1
-->
<property
name="poolNames">slave02,slave01,master</property>
</poolConfig>
</dbServer>
注意:若是讓 master 也負責讀,就配置;若是 master 只負責寫就從這裏刪除。
b)amoeba.xml
若是隻是一個從就直接寫從的名稱也能夠
<property name="readPool">slave01</property>
若是要配置多個從,就必須寫 multiPool。引用 dbServer.xml 中配置的這個節點名
稱
<property name="readPool">multiPool</property>web
一、rpm安裝
二、源碼安裝
三、通用二進制源碼安裝sql
環境準備數據庫
192.168.5.10 master1vim
192.158.5.20 slave1centos
2、配置master服務器,192.168.5.10
一、
第一步:登錄mysql,給root帳號添加密碼 //參考命令:SETPASSWORD = PASSWORD('pasword');
第二步:查看mysql版本號 //參考命令:select version();
第三步:添加Slave到本機同步的遠程帳號 //參考命令:GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.5.10' IDENTIFIED BY 'SLAVE';
第四部:查看當前mysql的全部用戶 //參考命令:select user,host,password from mysql.user;
第五步:刪除帳號密碼都爲空的localhost帳號 //參考命令:drop user ''@'localhost';
第六部:刪除帳號密碼都爲空的iz25ogxahfrz帳號 //參考命令:drop user ''@'iz25ogxahfrz';
第七步:退出mysql //參考命令:\q安全
二、編輯my.cnf配置文件 //參考命令:vim my.cnf服務器
三、
第一步:重啓mysql服務 //參考命令:service mysql restart
第二步:以root用戶+密碼登錄mysql //參考命令:mysql -uroot -ppassword
第三步:查看master的ID號 //參考命令:SHOW VARIABLES LIKE 'service_id';
第四部:查看當前master的File+pos信息,並記錄下來 //參考命令:show master status;
3、配置Slave服務器,192.168.5.20
一、
第一步:登錄mysql,給root帳號添加密碼 //參考命令:SETPASSWORD = PASSWORD('pasword');
第二步:查看mysql版本號 //參考命令:select version();
第三步:查看當前mysql的全部用戶 //參考命令:select user,host,password from mysql.user;
第四步:刪除帳號密碼都爲空的localhost帳號 //參考命令:drop user ''@'localhost';
第五部:刪除帳號密碼都爲空的iz25i0yer0yz帳號 //參考命令:drop user ''@'iz25i0yer0yz';
第六步:退出mysql //參考命令:\q
二、編輯slave服務器my.cnf配置文件 //參考命令:vim my.cnf
三、
第一步:重啓mysql服務 //參考命令:service mysql restart
第二步:查看slave服務器的ID號 //參考命令:SHOW VARIABLES LIKE 'service_id';
第三步:查看slave同步狀態 //參考命令:show slave status\G
第四部:關閉slave服務器,防止增刪改查。 //參考命令:stop slave;
第五步:配置slave如何同步master的數據 //參考命令:change master to master_host='192.168.5.10', master_user='slave', master_password='slave', master_port=3306, master_log_file='master_bin.000001', master_log_pos=120;
第六部:打開slave服務器的各項功能 //參考命令:start slave;
四、查看slave的同步狀態 //參考命令:show slave status\G
mysql主從配置完畢
4、安裝Amoeba:依賴JAVA環境
JAVA安裝
一、安裝
二、給amoeba受權一個mysql遠程帳戶
mysql> GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'192.168.5.30' IDENTIFIED BY 'amoeba' WITH GRANT OPTION;
5、安裝Amoeba:
6、配置:
一、配置Amoeba下的dbServers.xml
二、配置Amoeba下的amoeba.xml
7、啓動Amoeba:
一、【最好是先用當前方式啓動,可以看到啓動是否有錯誤,排查完錯誤後在後臺啓動】
網上查了一些資料:JDK7啓動對xss參數有最小值要求,必須大於228才能啓動JVM
解決:
設置 -Xss256k 便可解決
1 #JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m" 2 JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
# vim /usr/local/amoeba/jvm.properties
二、再次啓動:又報錯誤,請細看
三、上圖所示:我沒有用正常的關閉方式關閉Amoeba服務致使的錯誤
而後KILL進程以後居然不抱錯誤了
因此此次長教訓了
關閉Amoeba:
# /usr/local/amoeba/bin/shutdown
後臺啓動並把輸出日誌保存到/var/log/amoeba.log
# /usr/local/amoeba/bin/launcher > /var/log/amoeba.log 2>&1 &
8、登錄測試:
一、因爲30機器上並無安裝mysql,因此找一臺裝有mysql的機器進行測試
mysql -uamoeba -p123456 -h192.168.0.251 -P8066 //指定端口的-P是大寫的,不=同於其它。必定要注意大小寫
二、登錄成功,請自由測試。 測試方法: (1)amoeba建立庫而後分別登錄master、slave查看是否有剛建立的庫 (2)stop master的mysql,再slave上建立庫,不能則表示成功 (3)網上有更好的測試方法,不在一一列舉。請自行查找。