搭建的環境1主1從:MySQL_1作為主服務器ip:192.168.254.129,Mysql_2作為從服務器ip:192.168.254.130
首先準備好2臺安裝好Mysql5.7的服務器,安裝過程可以查看這個鏈接:https://www.dcr163.cn/519.html
這里我是使用的VMware Workstation 這個虛擬機軟件,首先在centos7上安裝好1臺mysql5.7之后,這里命名虛擬機為Mysql_1,克隆1份Mysql_1虛擬機出來,命名為Mysql_2。
依次打開這2臺mysql服務器,因為是克隆出來的,Mysql_2的Mysql軟件UUID是和第1臺一樣的,這里我們需要更改一下Mysql_2的UUID。
使用SSH工具連接到Mysql_2服務器上,先連接進入mysql服務
[root@mysql1 ~]# mysql -uroot –p
查詢出自己的UUID
mysql> SELECT UUID();
上面可以看到,這個是本機的UUID,復制這一串UUID,我們退出mysql
mysql> quit
修改Mysql_2的UUID
進入到安裝目錄下的data目錄
[root@mysql1 ~]# cd /usr/local/mysql/data/
編輯修改auto.cnf這個文件,UUID就定義在這個文件內,把剛剛復制出來的UUID,替換掉舊的
[root@mysql1 data]# vim auto.cnf
保存并且退出,我們重新啟動一下mysql服務
[root@mysql1 data]# /etc/init.d/mysqld restart
到這一步,我們的mysql_2就暫時準備好了。
開始配置mysql主從環境
先配置主服務器master,這里我們是Mysql_1,需要新增一些配置信息:
server-id=1 #這個類似一個唯一的標示,不能重復,最好是和自己的ip一致
log-bin=mysql-bin # 啟用二進制日志
#兩個可選參數(2選1)
binlog-do-db=mydb #需要同步的庫 多個格式 db1,db2 ,這里我們同步的是mydb這個數據庫
binlog-ignore-db= #忽略不同步的庫
[root@mysql1 ~]# vim /etc/my.cnf
保存后重啟Mysql_1的mysql服務
[root@mysql1 ~]# /etc/init.d/mysqld restart
在Mysql_1上創建剛剛我們指定的那個數據庫,我們是使用的utf8mb4字符集:
[root@mysql1 ~]# mysql -uroot -p
mysql> CREATE DATABASE `mydb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
在Mysql_1上創建一個同步的賬號,給從服務器使用
mysql> grant replication slave on *.* to 'repl'@'192.168.254.%' identified by '654321';
mysql> flush privileges;
上面我們創建了一個 repl賬號,密碼為:654321,只能在192.168.254.* 這個網段的客戶端鏈接,請根據自己的環境需求修改自己對應的ip。
先鎖表,不讓數據寫入,防止配置同步的時候數據不一致
mysql> flush tables with read lock;
查看主服務器的狀態,并且記錄二進制文件File和Position,這個配置從服務器的時候需要用到。
mysql> show master status;
備份mydbd的數據庫,先退出mysql客戶端
mysql> quit
[root@mysql1 ~]# mysqldump -uroot -p mydb>mydb.sql
把備份好的數據庫拷貝到從服務器上的/root目錄下,記得把從服務器的ip改成自己環境下的
[root@mysql1 ~]# scp mydb.sql 192.168.254.130:~
配置從服務器slave,我們這里是Mysql_2
新建一個和主服務器同樣的庫
mysql> CREATE DATABASE `mydb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
導入主服務器備份的數據sql
mysql> use mydb
Database changed
mysql> sourece /root/mydb.sql
修改配置文件,需要新增一些配置信息:
server-id=2 #這個類似一個唯一的標示,不能重復,最好是和自己的ip一致
log-bin=mysql-bin # 啟用二進制日志
#兩個可選參數(2選1)這兩個參數設置成和主一樣
binlog-do-db=mydb #需要同步的庫 多個格式 db1,db2 ,這里我們同步的是mydb這個數據庫
binlog-ignore-db= #忽略不同步的庫
#設置只讀,從服務器不給寫入,這個不影響數據同步
read_only = 1 #普通用戶設置只讀
super_read_only = 1 #超級用戶設置只讀
[root@mysql1 ~]# vim /etc/my.cnf
保存退出后重啟mysql服務器
[root@mysql2 ~]# /etc/init.d/mysqld restart
登陸Mysql_2客戶端,配置slave
[root@mysql2 ~]# mysql -uroot –p
執行以下命令, (根據mysql官方手冊的說明,5.5之前是slave stop,5.6之后改為stop slave)
mysql> stop slave;
mysql> change master to master_host='192.168.254.129', master_user='repl', master_password='654321',master_log_file='mysql-bin.000001', master_log_pos=815;
-- (master_log_file和master_log_pos填上剛才記錄下的二進制日志文件名和位置)
mysql> start slave;
查看從服務器的狀態:
mysql> show slave status G;
從服務器配置完成后,取消主服務器Mysql_1的鎖表操作;
mysql> unlock tables;
查看驗證主從配置的效果
在主服務器Mysql_1上創建一張a1表
CREATE TABLE `a1` (
`id` INT(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` CHAR(20) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
寫入一條數據
mysql> INSERT INTO a1 (title) VALUES ('不如吃茶去');
去從服務器Mysql_2看看有沒有同步
mysql> use mydb;
mysql> show tables;
mysql> SELECT * FROM a1;
多添加幾條記錄,刪除一條記錄,發現從服務器也能正常的同步;主從配置就這樣完成了,寫數據只能在主服務器中寫,從服務器只能讀取!