Linux6.3安裝Mysql5.7多實例並實現讀寫分離

進入官網
版本選擇

    選擇本身合適的版本(目前最新版本是8.0),因爲每一個版本的安裝方式有差別,這裏演示安裝的是5.7.22版,若是非此版本,請參考其餘博客文章     個人系統是centOS6.3,因此選擇下面選項,請根據實際狀況選擇合適的版本
html

下載

右鍵複製連接mysql

cd /opt
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz


下載完成解壓並移動到/usr/local/

tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

 

建立mysql實例用戶和文件

useradd mysql -r -s /sbin/nologin
mkdir -p /usr/local/mysql/mysql_files

建立多實例數據目錄

mkdir -p /data/mysql_data{1..3}


修改mysql目錄的屬組及用戶

chown root.mysql -R /usr/local/mysql

修改專用目錄的屬主及屬組

chown mysql.mysql -R /usr/local/mysql/mysql_files  /data/mysql_data{1..3}

配置Mysql的配置文件/etc/my.cnf

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /tmp/mysql_multi.log


[mysqld1]
datadir = /data/mysql_data1       #設置數據目錄
socket = /tmp/mysql.sock1         #設置sock文件存放路徑
port = 3306                      #設置監聽開放端口 
user = mysql                           #設置運行用戶
performance_schema = off          #關閉監控
innodb_buffer_pool_size = 32M         #設置innodb 緩存大小
bind_address = 0.0.0.0                  #設置監聽IP地址
skip-name-resolve = 0                 #關閉DNS反向解析

[mysqld2]
datadir = /data/mysql_data2
socket = /tmp/mysql.sock2
port = 3307
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0

[mysqld3]
datadir = /data/mysql_data3
socket = /tmp/mysql.sock3
port = 3308
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0

初始化各個實例:初始化完後會在日誌中生成密碼,記得保存,一會要用

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3

若缺失libaiolinux

yum install -y libnuma
yum install -y libnuma.so.1
yum -y install numactl


複製多實例腳本到服務管理目錄下

 cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

給予腳本可執行權限 

chmod +x /etc/init.d/mysqld_multi

加入service服務管理

chkconfig --add mysqld_multi

添加環境變量

vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=${MYSQL_HOME}/bin:$PATH


使修改的配置文件生效

source /etc/profile

啓動各個實例

mysqld_multi start

查看實例的監聽端口

ss -tulpn|grep mysqld

鏈接數據庫實例

鏈接實例1(主庫):sql

mysql -S /tmp/mysql.sock1 -p 前面生成的密碼
mysql> set password=password('123456');
mysql> flush privileges;

另外兩個實例的操做方法與實例1一致,再也不贅述。數據庫

容許遠程鏈接mysql

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

啓動mysql多實例

啓動時須要一個啓動腳本,這個腳本通常在/usr/local/mysql/support-files目錄下mysqld_multi.server,將這個腳本複製到init.d目錄下vim

cp /usr/local/mysql/support-files/mysqld_multi.server /etc/rc.d/init.d/mysqld_multi

以後可使用命令centos

/etc/rc.d/init.d/mysqld_multi start 1-3

啓動三個MySQL實例,注意這裏的數字和my.cnf中的[mysqldN]對應,1-3就是啓動[mysqld1][mysqld2][mysqld3]配置段的MySQL實例。
查看端口有沒有正常啓動緩存

netstat -ano | egrep "3307|3308|3306"

查看端口,看MySQL有沒有正常啓動,若是沒有啓動或報錯,通常報錯詳細日誌存在各個實例data目錄下的 主機名.err文件中,打開此文件查找錯誤緣由,逐步排錯就能夠了。服務器

關閉多個MySQL實例

通常教程上關閉的命令是socket

/etc/rc.d/init.d/mysqld_multi stop 1-3

可是這個命令常常不起做用,因此通常我是用

killall -u mysql  或 kill -9 the-mysql-pid

配置主從複製

修改/etc/my.cnf

主數據庫master 須要添加

log-bin=mysql-bin
server-id=1

另外兩個從數據庫slave1 slave2只須要添加

 server-id=2 
 server-id=3

關閉全部的mysql數據庫並檢查mysql數據的運行狀態,從新運行全部的mysql數據

killall -u mysql
/etc/rc.d/init.d/mysqld_multi start 1-3
netstat -ano |egrep "3306|3307|3308"

打開master,輸入密碼,賦予從庫權限帳號,容許用戶在主庫上讀取日誌,賦予Slave機器有File權限,

mysql -S /tmp/mysql.sock1 -p
GRANT FILE ON *.* TO 'root'@'192.168.98.128' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.98.128' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;


只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權限才能夠


退出主庫master,再次重啓mysql,進入主庫master,查看主庫信息

show master status;

記住binlog文件和Position

退出主庫master,分別進入另外兩臺從庫slave1 和slave2,並執行下面的操做

change master to master_host='192.168.98.128',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154;

其中 master_host對應的是主庫的ip地址.master_user和master_password是主庫的賬號和密碼,master_log_file則是在主庫查詢到的二進制文件的名稱,從庫會自動查詢到這個文件,master_log_pos是日誌的位置.
 

測試

接下來進行最後的測試,首先在主庫建立一個數據庫,若是從庫能一樣發現到該庫的存在,則證實主從同步成功.

測試成功,若是發現新增的數據庫沒有出現,請先重啓從庫slave,以後能夠看到新增的數據庫了.

PS:開放數據庫訪問端口和修改客戶端登錄的密碼

開放mysql的訪問端口

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

保存修改

/etc/rc.d/init.d/iptables save

重啓防火牆使其改動生效

/etc/init.d/iptables restart

因爲的mysql5.7中user表沒有password字段,因此5.7以前的版本使用navicat等客戶端沒法正常登錄mysql,請使用如下方法解決此問題
打開相應的數據庫,執行此sql命令,修改對應的賬號和密碼,便可遠程訪問

ALTER USER 'root'@'%' IDENTIFIED BY '123456';

 

總結

    總算寫完單服務器安裝mysql多實例教程並實現了主從讀寫分離,真的不容易,查閱了官方安裝文檔和和結合網上的幾篇的博客,花了很多時間來梳理,最後仍是成功安裝了,也能夠把項目在服務器環境上跑起來了.以後會補上不一樣服務器上的mysql5.7數據庫安裝和實現主從讀寫分離的教程.

參考文章

mysql5.7主從(Master/Slave)同步配置

centos7 安裝mysql 5.7多實例  

相關文章
相關標籤/搜索