Linux--主從複製

一 . mysql+centos7

  mariadb

mariadb實際上是跟mysql是同樣的,只不過是在centos7上叫作mariadb, 主要是由於mysql被甲骨文公司收購後,可能會有閉源的風險,
  因此分支出來了mariadb, 並且徹底兼容mysql.

  安裝mariadb

# 安裝mariadb有三張方法,分別是:
1.yum安裝
2.源代碼編譯安裝
3.rpm包安裝

  咱們這裏介紹一下yum安裝方法.

複製代碼
# yum 安裝的前提條件,準備好yum源,能夠選擇官方源,阿里雲源,163源,清華源等等.
# 咱們主要採用的源有兩個,
一個是阿里雲源,可能版本較低,而且軟件包小,功能不多.
# 安裝mariadb
yum install mariadb-server mariadb -y

二是mariadb官方源
vim /etc/yum.repos.d/MariaDB.repo    # 這個文件就是yum庫
而後寫入以下內容:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# 官方源安裝mariadb的方法是:
yum install MariaDB-server MariaDB-client -y
複製代碼

  mariadb數據庫的相關命令

複製代碼
systemctl start mariadb  #啓動MariaDB

systemctl stop mariadb  #中止MariaDB

systemctl restart mariadb  #重啓MariaDB

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

  在確保啓動成功後,進行初始化

mysql_secure_installation

  mariadb的基本命令(和mysql同樣)

#修改mysql密碼
MariaDB [(none)]> set password = PASSWORD('attila666');
# 建立用戶
MariaDB [(none)]> create user attila@'127.0.0.1' identified by 'attila666';

  切換成普通用戶,會和root用戶在權限上有不少不一樣

複製代碼
grant 權限 on 數據庫.表名 to 帳戶@主機名           # 對特定數據庫中的特定表受權

grant all privileges on *.* to attila@"%";     # 給attila這個帳戶在任何主機上對全部庫和全部表受權全部權限

grant all privileges on *.* to attila@"%"  identified by  "666";   # 密碼設置成666,attila全部主機全部權限

# 設置完權限必定要刷新權限,這樣才能生效
flush  privileges;

# 移除權限
MariaDB [(none)]> revoke all privileges on *.* from yuchao@"%";
複製代碼

  配置mysql(mariadb)

    中文編碼設置mysql

複製代碼
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
複製代碼

二 . 主從複製

# 主從複製技術,保證了,數據庫的讀寫分離,併發性更好,而且保障數據安全,防止單點數據庫故障數據丟失
MySQL數據庫的主從複製方案,是其自帶的功能,而且主從複製並非複製磁盤上的數據庫文件,而是經過binlog日誌複製到須要同步的從服務器上。
在複製的過程當中,一臺服務器充當主服務器(Master),接收來自用戶的內容更新,
而一個或多個其餘的服務器充當從服務器(slave),接收來自Master上binlog文件的日誌內容,解析出SQL,從新更新到slave,使得主從服務器數據達到一致。

(1) master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events); 
(2) slave將master的binary log events拷貝到它的中繼日誌(relay log); 
(3) slave重作中繼日誌中的事件,將改變反映它本身的數據。

  主從配置流程  

  1 . 環境準備

準備兩臺服務器,安裝好倆個數據庫.
192.168.81.132  是主庫
192.168.81.133  是從庫

  master主庫的配置

複製代碼
# 1.編輯主庫的/etc/my.cnf 寫入以下配置    
[mysqld]
server-id=1
log-bin=s18mysql-bin
# 2.該了配置文件,重啓數據庫
systemctl restart mariadb
# 3.建立一個用於遠程複製數據的帳戶
create user 'attila'@'%' identified by '666';
# 4.授予yazhou這個帳號,從庫的身份
grant replication slave on *.* to 'attila'@'%';
# 5。鎖住主庫,防止數據寫入,影響實驗 
flush table with read lock;    
# 6.導出當前全部的數據,發送給從庫  在mariadb的環境之外寫這條指令
mysqldump -uroot -p --all-databases > /opt/all.sql  
# 7.發送這個數據給從庫    有個冒號要注意
scp  /opt/all.sql   root@192.168.81.133:/opt/
# 8.查看主庫的binlog狀態
show master status\G
# 9.進行解鎖 
unlock table;
複製代碼

  從庫配置

複製代碼
# 1.修改從庫的配置文件/etc/my.cnf 
# 寫入以下配置 這個id只要和主庫不同就行
server-id=10
# 2.導入主庫的數據庫
    #導入數據的第一種方式
    mysql -uroot -p  <  /opt/all.sql 
    #導入數據的第二種方式
    MariaDB [s18utf8]> source  /opt/all.sql;
# 3.此時主從數據庫已經在同一個起始點了,開始數據同步
    # 這是一段sql,在mysql中執行的
    # 在從庫中寫  關於master的參數都是主庫中的
    change master to master_host='192.168.81.132',
    master_user='attila',
    master_password='666',
    # 下面這兩個數據是show master status獲得的
    master_log_file='s18mysql-bin.000003',
    master_log_pos=458;  # 這個就是同步的位置是458
# 4.開啓從庫同步(在mysql中輸入的命令)
    start slave ;
# 5.檢測是否主從成功 ,
show slave status\G 
# 檢查這2個參數
Slave_IO_Running: Yes
Slave_SQL_Running: Yes    

# 6.此時已經能夠在主庫寫入數據,從庫實時寫入了    

# 7.配置mysql主從複製,讀寫分離    
# 修改從庫的/etc/my.cnf 添加只讀參數
read-only=true
複製代碼

  tip:

複製代碼
# 在主庫上建立一個普通用戶,在從庫上進行登陸,查看是否能夠讀寫數據庫, 在主庫上建立的緣由就是從庫也能跟着建立操做
# 必定要是普通用戶,由於root用戶達不到readonly的效果  坑
create user "daniel"@"%" identified by "666"; 
# 刷新權限
flush privileges
# 給這個普通用戶查看數據庫的權限 
grant select on *.* to daniel@"%" ;
flush privileges

# 爲了保證主從同步效果,切換用戶時,不能Ctrl + c 退出 要exit退出
複製代碼
相關文章
相關標籤/搜索