一、查看mysql的安裝狀況node
rpm -qa | grep -i mysql
二、刪除上圖安裝的軟件mysql
rpm -ev mysql-community-libs-5.7.27-1.el6.x86_64 --nodeps
三、都刪除成功以後,查找相關的mysql的文件linux
find / -name mysql
四、刪除所有相關文件sql
rm -rf /var/lib/mysql rm -rf /var/lib/mysql/mysql rm -rf /etc/logrotate.d/mysql rm -rf /usr/share/mysql rm -rf /usr/bin/mysql rm -rf /usr/lib64/mysql
五、再次執行命令數據庫
rpm -qa | grep -i mysql
若是沒有顯式則表示卸載完成。vim
一、查看系統中是否自帶安裝mysql安全
yum list installed | grep mysql
二、刪除系統自帶的mysql及其依賴(防止衝突)服務器
yum -y remove mysql-libs.x86_64
三、安裝wget命令架構
yum install wget -y
四、給CentOS添加rpm源,而且選擇較新的源併發
wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
五、安裝下載好的rpm文件
yum install mysql-community-release-el6-5.noarch.rpm -y
六、安裝成功以後,會在/etc/yum.repos.d/文件夾下增長兩個文件
這兩個文件是幫助mysql安裝的。
七、修改mysql-community.repo文件
原文件:
修改以後:
八、使用yum安裝mysql
yum install mysql-community-server -y
九、啓動mysql服務並設置開機啓動
#啓動mysql服務 service mysqld start #設置mysql開機啓動 chkconfig mysqld on
十、獲取mysql的臨時密碼
grep "password" /var/log/mysqld.log
十一、使用臨時密碼登陸
mysql -uroot -p #輸入密碼
十二、修改密碼
-- 修改密碼複雜度 set global validate_password_policy=0; set global validate_password_length=1; -- 修改密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
1三、修改遠程訪問權限
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; flush privileges;
1四、設置字符集爲utf-8
#在[mysqld]部分添加: character-set-server=utf8 #在文件末尾新增[client]段,並在[client]段添加: default-character-set=utf8
若是安裝過程當中有任何錯誤,能夠查看日誌:/var/log/mysqld.log。
MySQL 主從複製是指數據能夠從一個MySQL數據庫服務器主節點複製到一個或多個從節點。MySQL 默認採用異步複製方式,這樣從節點不用一直訪問主服務器來更新本身的數據,數據的更新能夠在遠程鏈接上進行,從節點能夠複製主數據庫中的全部數據庫或者特定的數據庫,或者特定的表。
也就是說:
注意:
具體步驟:
一主一從
主主複製
一主多從
多主一從
聯級複製
一、在兩臺數據庫中分別建立數據庫
--注意兩臺必須所有執行,數據庫名根據須要自行定義。 create database msb;
2、在主服務器進行以下配置:
# 修改配置文件,執行如下命令打開mysql配置文件 vi /etc/my.cnf # 在mysqld模塊中添加以下配置信息 # 二進制文件名稱 log-bin=master-bin # 二進制日誌格式,有row、statement、mixed三種格式。 # row 指的是把改變的內容複製過去,而不是把命令在從服務器上執行一遍。 # statement 指的是在主服務器上執行的SQL語句,在從服務器上執行一樣的語句。MySQL默認採用基於語句的複製,效率比較高。 # mixed 指的是默認採用基於語句的複製,一旦發現基於語句的沒法精確的複製時,就會採用基於行的複製。 binlog-format=ROW #要求各個服務器的id必須不同 server-id=1 #同步的數據庫名稱 binlog-do-db=msb
三、配置從服務器登陸主服務器的帳號受權
--受權操做 set global validate_password_policy=0; set global validate_password_length=1; grant replication slave on *.* to 'root'@'%' identified by '123456'; --刷新權限 flush privileges;
四、從服務器的配置
# 修改配置文件,執行如下命令打開mysql配置文件 vi /etc/my.cnf
# 在mysqld模塊中添加以下配置信息 log-bin=master-bin #二進制文件的名稱 binlog-format=ROW #二進制文件的格式 server-id=2 #服務器的id
五、重啓主服務器的mysqld服務
-- 重啓mysql服務 service mysqld restart -- 登陸mysql數據庫 mysql -uroot -p -- 查看master的狀態 show master status;
六、重啓從服務器並進行相關配置
-- 重啓mysql服務 service mysqld restart -- 登陸mysql mysql -uroot -p -- 鏈接主服務器 change master to master_host='IP地址',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154; -- 啓動slave start slave -- 查看slave的狀態 show slave status \G
只要字段Slave_IO_Running、Slave_SQL_Running兩個值都是Yes,那麼就表示從數據庫的IO線程、SQL線程從主數據庫同步數據成功。
九、此時能夠在主服務器進行相關的數據添加、修改、刪除工做,再從服務器看相關的數據內容是否同步增長、修改或刪除。
MySQL讀寫分離基本原理是讓master數據庫處理寫操做,slave數據庫處理讀操做。master將寫操做的變動同步到各個slave節點。
MySQL讀寫分離能提升系統性能的緣由在於:
2.一、硬件配置
首先須要準備三臺機器:主數據庫、從數據庫、proxy服務器。
master 192.168.85.11 slave 192.168.85.12 proxy 192,168.85.14
2.二、首先在master和slave上配置主從複製
讀寫分離配置有多種方式,本文介紹兩種方式:mysql-proxy方式(暫不是穩定版本)、Amoeba方式。
一、下載mysql-proxy
https://downloads.mysql.com/archives/proxy/#downloads
二、上傳軟件到proxy的機器
直接經過xftp進行上傳。
三、解壓安裝包
tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
四、修改解壓後的目錄
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
五、進入mysql-proxy的目錄
cd mysql-proxy
六、建立目錄
mkdir conf mkdir logs
七、添加環境變量
# 打開/etc/profile文件 vi /etc/profile # 在文件的最後面添加一下命令 export PATH=$PATH:/root/mysql-proxy/bin
八、執行命令讓環境變量生效
source /etc/profile
九、進入conf目錄,建立文件並添加一下內容
vi mysql-proxy.conf
添加內容
[mysql-proxy] user=root proxy-address=192.168.85.14:4040 proxy-backend-addresses=192.168.85.11:3306 proxy-read-only-backend-addresses=192.168.85.12:3306 proxy-lua-script=/root/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua log-file=/root/mysql-proxy/logs/mysql-proxy.log log-level=debug daemon=true
十、開啓mysql-proxy
mysql-proxy --defaults-file=/root/mysql-proxy/conf/mysql-proxy.conf
十一、查看是否安裝成功,打開日誌文件
cd /root/mysql-proxy/logs tail -100 mysql-proxy.log
# 內容以下:表示安裝成功 2019-10-11 21:49:41: (debug) max open file-descriptors = 1024 2019-10-11 21:49:41: (message) proxy listening on port 192.168.85.14:4040 2019-10-11 21:49:41: (message) added read/write backend: 192.168.85.11:3306 2019-10-11 21:49:41: (message) added read-only backend: 192.168.85.12:3306 2019-10-11 21:49:41: (debug) now running as user: root (0/0)
十二、進行鏈接
# mysql的命令行會出現沒法鏈接的狀況,因此建議使用客戶端 mysql -uroot -p123456 -h192.168.85.14 -P 4040
Amoeba(變形蟲)項目,專一 分佈式數據庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具備負載均衡、高可用性、sql過濾、讀寫分離、可路由相關的query到目標數據庫、可併發請求多臺數據庫合併結果。
主要解決:
目前要實現mysql的主從讀寫分離,主要有如下幾種方案:
3.一、首先安裝jdk,直接使用rpm包安裝便可。
3.二、下載amoeba對應的版本https://sourceforge.net/projects/amoeba/,直接解壓便可。
3.三、配置amoeba的配置文件。
dbServers.xml:
<?xml version="1.0" encoding="gbk"?> <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"> <dbServer name="abstractServer" abstractive="true"> <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"> <property name="connectionManager">${defaultManager}</property> <property name="sendBufferSize">64</property> <property name="receiveBufferSize">128</property> <!-- mysql port --> <property name="port">3306</property> <!-- mysql schema --> <property name="schema">msb</property> <!-- mysql user --> <property name="user">root</property> <property name="password">123456</property> </factoryConfig> <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool"> <property name="maxActive">500</property> <property name="maxIdle">500</property> <property name="minIdle">1</property> <property name="minEvictableIdleTimeMillis">600000</property> <property name="timeBetweenEvictionRunsMillis">600000</property> <property name="testOnBorrow">true</property> <property name="testOnReturn">true</property> <property name="testWhileIdle">true</property> </poolConfig> </dbServer> <dbServer name="writedb" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.85.11</property> </factoryConfig> </dbServer> <dbServer name="slave" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.85.12</property> </factoryConfig> </dbServer> <dbServer name="myslave" 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">slave</property> </poolConfig> </dbServer> </amoeba:dbServers>
amoeba.xml:
<?xml version="1.0" encoding="gbk"?> <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd"> <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/"> <proxy> <!-- service class must implements com.meidusa.amoeba.service.Service --> <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService"> <!-- port --> <property name="port">8066</property> <!-- bind ipAddress --> <!-- <property name="ipAddress">127.0.0.1</property> --> <property name="connectionFactory"> <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"> <property name="sendBufferSize">128</property> <property name="receiveBufferSize">64</property> </bean> </property> <property name="authenticateProvider"> <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> <property name="user">root</property> <property name="password">123456</property> <property name="filter"> <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController"> <property name="ipFile">${amoeba.home}/conf/access_list.conf</property> </bean> </property> </bean> </property> </service> <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"> <!-- proxy server client process thread size --> <property name="executeThreadSize">128</property> <!-- per connection cache prepared statement size --> <property name="statementCacheSize">500</property> <!-- default charset --> <property name="serverCharset">utf8</property> <!-- query timeout( default: 60 second , TimeUnit:second) --> <property name="queryTimeout">60</property> </runtime> </proxy> <!-- Each ConnectionManager will start as thread manager responsible for the Connection IO read , Death Detection --> <connectionManagerList> <connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper"> <property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property> </connectionManager> </connectionManagerList> <!-- default using file loader --> <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"> <property name="configFile">${amoeba.home}/conf/dbServers.xml</property> </dbServerLoader> <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> <property name="ruleLoader"> <bean class="com.meidusa.amoeba.route.TableRuleFileLoader"> <property name="ruleFile">${amoeba.home}/conf/rule.xml</property> <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property> </bean> </property> <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property> <property name="LRUMapSize">1500</property> <property name="defaultPool">master</property>
<!-- 此處定義的寫池取自dbServer.xml配置中的master --> <property name="writePool">master</property>
<!-- 此處定義的讀池配置取自dbServers.xml配置中的myslave --> <property name="readPool">myslave</property> <property name="needParse">true</property> </queryRouter> </amoeba:configuration>
/root/amoeba-mysql-3.0.5-RC/bin/launcher
若是啓動過程當中報如下錯誤:
則是由於棧空間過小了,所以能夠修改配置jvm.properties。
vim /root/amoeba-mysql-3.0.5-RC/jvm.properties
找到JVM_OPTIONS配置項修改爲以下配置 (能夠根據自身機器性能調節):
而後從新啓動Amoeba
--測試的sql --在安裝amoeba的服務器上登陸mysql mysql -h192.168.85.13 -uroot -p123 -P8066 --分別在master、slave、amoeba上登陸mysql use msb select * from user; --在amoeba上插入數據 insert into user values(2,2); --在master和slave上分別查看錶中的數據 select * from user; --將master上的mysql服務中止,繼續插入數據會發現插入不成功,可是可以查詢 --將master上的msyql服務開啓,中止slave上的mysql,發現插入成功,可是不可以查詢