1. 程式人生 > 實用技巧 >mysql主從複製搭建(普通安裝和docker方式)

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,說明主從複製已經開啟