【Liunx】MySQL安裝主從複製

MYSQL安裝(mariadb)

MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可。
開發這個分支的緣由之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,所以社區採用分支的方式來避開這個風險。
MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。

方法1:yum安裝mariadb

Red Hat Enterprise Linux/CentOS 7.0 發行版已將默認的數據庫從 MySQL 切換到 MariaDB。python

第一步:添加 MariaDB yum 倉庫

找到yum倉庫目錄,建立repo文件mysql

一、首先在 RHEL/CentOS 和 Fedora 操做系統中添加 MariaDB 的 YUM 配置文件 MariaDB.repo 文件。

#編輯建立mariadb.repo倉庫文件
vi /etc/yum.repos.d/MariaDB.repo
二、添加repo倉庫配置
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
3.此時yum會自動的加載這個repo文件,讀取內容

第二步:在 CentOS 7 中安裝 MariaDB

4.下載mariadb數據庫,服務端和客戶端
yum install MariaDB-server MariaDB-client

啓動mariadb相關命令sql

複製代碼
mariadb數據庫的相關命令是:

systemctl start mariadb  #啓動MariaDB

systemctl stop mariadb  #中止MariaDB

systemctl restart mariadb  #重啓MariaDB

systemctl enable mariadb  #設置開機啓動
複製代碼

啓動後正常使用mysql數據庫

systemctl start mariadb

初始化mysql

複製代碼
在確認 MariaDB 數據庫軟件程序安裝完畢併成功啓動後請不要當即使用。爲了確保數據 庫的安全性和正常運轉,須要先對數據庫程序進行初始化操做。這個初始化操做涉及下面 5 個 步驟。
➢ 設置 root 管理員在數據庫中的密碼值(注意,該密碼並不是 root 管理員在系統中的密 碼,這裏的密碼值默認應該爲空,可直接按回車鍵)。
➢ 設置 root 管理員在數據庫中的專有密碼。
➢ 隨後刪除匿名帳戶,並使用 root 管理員從遠程登陸數據庫,以確保數據庫上運行的業
務的安全性。
➢ 刪除默認的測試數據庫,取消測試數據庫的一系列訪問權限。
➢ 刷新受權列表,讓初始化的設定當即生效。
複製代碼

確保mariadb服務器啓動後,執行命令初始化vim

mysql_secure_installation

 

設置編碼

中文編碼設置,編輯mysql配置文件/etc/my.cnf,下入如下內容centos

複製代碼
\s  #查看數據庫編碼

#修改mysql的配置文件,讓它支持中文
#經過yum安裝的配置文件在/etc/my.cnf

配置內容以下:
#服務端的編碼添加以下內容
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

#客戶端的編碼以下
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
複製代碼

重啓mariadb生效編碼安全

systemctl restart mariadb

權限分配

建立其餘數據庫帳戶

生產環境裏不會死磕root用戶,爲了數據庫的安全以及和其餘用戶協同管理數據庫,就須要建立其餘數據庫帳戶,而後分配權限,知足工做需求。服務器

#修改mysql密碼
MariaDB [(none)]> set password = PASSWORD('redhat123');
MariaDB [(none)]> create user yuchao@'127.0.0.1' identified by 'redhat123';

MariaDB [(none)]> use mysql;

MariaDB [mysql]> select host,user,password from user where user='yuchao';

切換普通用戶yuchao,查看數據庫信息,發現沒法看到完整的數據庫列表架構

[root@master ~]# mysql -uyuchao -p -h 127.0.0.1

MariaDB [(none)]> show databases;

數據庫權限設置

mysql使用grant命令對帳戶進行受權,grant命令常見格式以下併發

grant 權限 on 數據庫.表名 to 帳戶@主機名            對特定數據庫中的特定表受權
grant 權限 on 數據庫.* to 帳戶@主機名              對特定數據庫中的全部表給與受權
grant 權限1,權限2,權限3 on *.* to 帳戶@主機名      對全部庫中的全部表給與多個受權
grant all privileges on *.* to 帳戶@主機名      對全部庫和全部表受權全部權限

退出數據庫,使用root登陸,開始權限設置

複製代碼
[root@master ~]# mysql -uroot -p

MariaDB [(none)]> use mysql;

MariaDB [(none)]> grant all privileges on *.* to yuchao@127.0.0.1;

MariaDB [mysql]> show grants for yuchao@127.0.0.1;
複製代碼

移除權限

MariaDB [(none)]> revoke all privileges on *.* from yuchao@127.0.0.1;

權限配置

遠程鏈接設置哦設置全部庫,全部表的全部權限,賦值權限給全部ip地址的root用戶
mysql > grant all privileges on *.* to root@'%' identified by 'password';
#建立用戶
mysql > create user 'username'@'%' identified by 'password';
#刷新權限
flush privileges;

數據庫的備份與還原

複製代碼
備份命令:
mysqldump  -uroot -p --all-databases >  /opt/alldb.sql
#恢復數據的命令
方式1:
進入數據庫後,用source命令讀取sql文件
[mysql] >  source /opt/alldb.sql

方式2:
用登陸命令導入數據
mysql -uroot -p < /opt/alldb.sql 
複製代碼

mysql的主從複製技術

MySQL數據庫的主從複製方案,是其自帶的功能,而且主從複製並非複製磁盤上的數據庫文件,而是經過binlog日誌複製到須要同步的從服務器上。

MySQL數據庫支持單向、雙向、鏈式級聯,等不一樣業務場景的複製。在複製的過程當中,一臺服務器充當主服務器(Master),接收來自用戶的內容更新,而一個或多個其餘的服務器充當從服務器(slave),接收來自Master上binlog文件的日誌內容,解析出SQL,從新更新到Slave,使得主從服務器數據達到一致。

主從複製的邏輯有如下幾種

一主一從,單向主從同步模式,只能在Master端寫入數據

一主多從

雙主主複製邏輯架構,此架構能夠在Master1或Master2進行數據寫入,或者兩端同事寫入(特殊設置)

在生產環境中,MySQL主從複製都是異步的複製方式,即不是嚴格的實時複製,可是給用戶的體驗都是實時的。
MySQL主從複製集羣功能使得MySQL數據庫支持大規模高併發讀寫成爲可能,且有效的保護了服務器宕機的數據備份。

應用場景

利用複製功能當Master服務器出現問題時,咱們能夠人工的切換到從服務器繼續提供服務,此時服務器的數據和宕機時的數據幾乎徹底一致。
複製功能也可用做數據備份,可是若是人爲的執行drop,delete等語句刪除,那麼從庫的備份功能也就失效了.

主從機制實現原理

master機器

環境準備,兩臺機器分別安裝好mariadb數據庫

複製代碼
機器1:192.168.61.130 (master機器)
1.修改mysql的配置文件,開啓binlog日誌功能
vim /etc/my.cnf,寫入以下信息
[mysqld]
# 服務的惟一標識(主從之間都必須不一樣)
server-id=1
# 啓動二進制日誌名稱爲mysql-bin
log-bin=s20mysql-bin

2.重啓數據庫生效binlog日誌文件
systemctl restart mariadb

3.在主庫上,建立一個用戶,用於主從複製
create user 'songzhixue'@'%' identified by '123456';

4.給這個songzhixue帳號,授予slave的身份
grant replication slave on *.* to 'songzhixue'@'%';

5.進行鎖表,防止數據寫入
flush table with read lock;

6.導出此時的主庫數據,發送給從庫,保證起點一致性
mysqldump -uroot -p --all-databases > /tmp/alldb.sql
scp  /tmp/alldb.sql root@192.168.16.49:/tmp/

7.當從庫配置好複製以後,回到這裏解鎖,寫入數據,查看從庫數據是否寫入
複製代碼

slave主機

複製代碼
機器2:192.168.61.131  (slave主機)
1.修改從庫機器的配置文件,開啓id,以及只讀模式
vim /etc/my.cnf 以下

[mysqld]
server-id=1000
# 只讀模式
read-only=true


2.重啓從庫
systemctl restart mariadb

3.一條命令,創建主從之間的複製關係
#查看主庫的狀態【show master status】
MariaDB [(none)]> show master status;
+---------------------+----------+--------------+------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| s20mysql-bin.000001 |      627 |              |                  |
+---------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
#File是二進制日誌文件名,Position 是日誌開始的位置。從庫是根據主庫的日誌來複制的;

#配置下面的參數
#主庫的ip
change master to master_host='192.168.61.130',
#主庫建立的用於主從複製的用戶名
master_user='songzhixue',
#主庫建立的用於主從複製的密碼
master_password='123456',
#二進制日誌文件名
master_log_file='s20mysql-bin.000001',
#日誌開始的位置
master_log_pos=627;


4.開啓從庫的slave功能
# 防火牆必須在關閉的狀態下才能夠執行下面的命令
stop salve;
start salve;

5.查看從庫的狀態,檢測是否複製成功
show slave status\G 

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.61.130
                  Master_User: songzhixue
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: s20mysql-bin.000001
          Read_Master_Log_Pos: 813
               Relay_Log_File: bogon-relay-bin.000003
                Relay_Log_Pos: 726
        Relay_Master_Log_File: s20mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


查看以下兩個參數是不是yes,主從複製即爲正確
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
複製代碼

遠程鏈接數據庫

1
2
3
root  # 表示liunx上的用戶名
- p    #指定密碼
- h    # 指定鏈接的主機地址
相關文章
相關標籤/搜索