mysql主從複製搭建(普通安裝和docker方式)
centos7普通安裝
mysql下載
下載地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz。上傳至linux機/opt 目錄下
單機安裝mysql
安裝準備工作
tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ cd /usr/local mv mysql-5.7.27-linux-glibc2.12-x86_64/ mysql-5.7.27 cd mysql-5.7.27/ mkdir data yum list installed | grep mariadb #檢查 linux 是否安裝了 mariadb資料庫 yum -y remove mariadb-libs.x86-64 # 有的話解除安裝掉,否則會和mysql衝突 useradd mysql # mysql使用者和使用者組,用於安裝和使用mysql groupadd mysql
切換到mysql-5.7.27/bin目錄下執行mysql的mysqld 命令初始化資料庫的基本資訊
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql-5.7.27/data --basedir=/usr/local/mysql-5.7.27 引數說明: --initialize 初始化mysql,建立mysql的root, 隨機生成密碼。記住密碼,登入msyql使用。 --user執行msyqld 命令的linux使用者名稱 --datadir : mysql資料檔案的存放位置,目錄位置參照本機的設定。 --basedir : msyql安裝程式的目錄,目錄位置參照本機的設定。 該命令執行後,會生成一個臨時的mysql資料庫root使用者的密碼,請先拷貝出來記住,後續第一次登入mysql 例如#/T3ds.jhdUM
啟用安全功能:在伺服器與客戶機之間來回傳輸的所有資料進行加密。通過證書提供了身份驗證機制,mysql命令程式,mysql_ssl_rsa_setup提供了開啟資料加密功能,生成數字證書。在mysql-5.7.27/bin目錄下執行命令
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql-5.7.27/data
mysql安裝後,需要更改mysql-5.7.27整個資料夾目錄許可權,更改所屬的使用者和組,是之前建立的mysql使用者。執行命令
chown -R mysql:mysql /usr/local/mysql-5.7.27/
建立mysql配置檔案(存在則替換掉),vi /etc/my.cnf,新增如下配置
[mysql]
# 設定mysql客戶端預設字符集
default-character-set=utf8
[mysqld]
#跳過許可權表校驗
#skip-grant-tables
skip-name-resolve
#設定3306埠
port = 3306
# 設定mysql的安裝目錄
basedir=/usr/local/mysql-5.7.27
# 設定mysql資料庫的資料的存放目錄
datadir=/usr/local/mysql-5.7.27/data
# 允許最大連線數
max_connections=200
# 服務端使用的字符集預設為8位元編碼的latin1字符集
character-set-server=utf8
# 建立新表時將使用的預設儲存引擎
default-storage-engine=INNODB
# 表名不區分大小寫
lower_case_table_names=1
max_allowed_packet=16M
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql-5.7.27/data/mysqld.pid
啟動MySQL服務,mysql-5.7.27/bin目錄下執行命令
./mysqld_safe & #mysqld_safe程式會在啟動MySQL伺服器後繼續監控其執行情況,並在其宕機時重新啟動它
ps -ef | grep mysql # 檢視mysql是否啟動
重置mysql登陸密碼和訪問許可權
./mysql -u root -p #輸出之前生成的密碼,進入mysql client
alter user 'root'@'localhost' identified by '123456'; #修改root賬號的密碼
grant all privileges on *.* to root@'%' identified by '123456';#遠端客戶端訪問授權
具體引數意思如下:
其中*.* 的第一個*表示所有資料庫名,第二個*表示所有的資料庫表
root@'%' 中的root表示使用者名稱
%表示ip地址,%也可以指定具體的ip地址
exit #退出客戶端
停止mysql
./mysqladmin -uroot -p shutdown #輸入root密碼退出
開放防火牆
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
將mysql配置為一個服務,以方便管理,做一下操作後執行service mysqld start即可啟動mysql ,service mysqld stop停止mysql。
cp /usr/local/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysqld
vi /etc/init.d/mysqld #開啟後設置basedir和datadir的路徑
basedir=/usr/local/mysql-5.7.27
datadir=/usr/local/mysql-5.7.27/data
主從設定
進入master伺服器,開啟mysql客戶端,在主資料庫上建立同步賬號後退出客戶端
./mysql -u root -p #進入客戶端
grant replication slave on *.* to 'repl'@'192.168.1.135' identified by '123456';
FLUSH PRIVILEGES; #注意授權的ip為從伺服器的ip,%代表任何ip都可以使用
配置主節點,開啟binlog,vi /etc/my.cnf,新增如下配置
log-bin=mysql-bin # 日誌檔名字首
server-id=1 # 在叢集中的唯一id,值可以為1~2^32-1的整數
重啟主節點mysql,進入客戶端,檢視主節點狀態
show master status;#主要為了檢視 當前二進位制日誌名和偏移量
配置從節點,新增配置,vi /etc/my.cnf
server-id=2
重啟從節點mysql,進入從節點mysql客戶端,執行 CHANGE MASTER TO 語句設定同步的主庫
CHANGE MASTER TO MASTER_HOST='192.168.1.125',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
START SLAVE;#開啟從庫
show slave status #檢視同步狀態,SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明主從複製已經開啟
在主庫執行下列命令,檢視從庫是否產生對應的資料庫、表和資料
CREATE DATABASE orders CHARACTER SET 'utf8';
use orders;
CREATE TABLE t_order (
order_id BIGINT PRIMARY KEY,
order_time DATETIME,
customer_id BIGINT,
order_amount DECIMAL(8,2)
);
docker容器快速搭建mysql主從
首先拉取docker映象,我們這裡使用5.7版本的mysql
docker pull mysql:5.7
然後使用此映象啟動容器,啟動master容器
docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
進入容器
docker exec -it mysql-master /bin/bash
進入容器後,升級apt-get,安裝vi編輯器
apt-get update #升級安裝工具,需聯網
apt-get install vim
exit #退出容器
根據修改後的容器建立新的映象,避免重複下載和安裝vi編輯器
docker commit dd16f3e7be05 localmysql:1.0
根據新映象啟動Slave:
docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d localmysql:1.0
進入master容器,開啟配置檔案 vi /etc/mysql/my.cnf,新增如下配置
[mysqld]
log-bin=mysql-bin # 日誌檔名字首
server-id=1 # 在叢集中的唯一id,值可以為1~2^32-1的整數
進入mysql客戶端 mysql -u root -p
,執行如下命令建立同步賬號
grant replication slave on *.* to 'root'@'%' identified by '123456';
FLUSH PRIVILEGES; #注意授權的ip為從伺服器的ip,%代表任何ip都可以使用,root表示同步所使用的使用者,也可以單獨建立同步的使用者
退出mysql客戶端,重啟mysql:service mysql restart
,此時容器會退出,重新啟動容器,並進入mysql客戶端,檢視master狀態
show master status #記下file和position的值
進入slave容器,開啟配置檔案 vi /etc/mysql/my.cnf,新增如下配置
[mysqld]
server-id=2
重啟mysql,此時容器會退出。檢視master容器的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱|容器id
啟動slave容器並進入容器,進入mysql客戶端,執行如下命令
CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
start slave;#開啟主從
show slave status \G #檢視同步狀態,SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明主從複製已經開啟