mysql 主从同步-读写分离
主從同步與讀寫分離測試?
?
一、? 實驗環境(主從同步)
Master ??????????????????centos 7.3????????????? 192.168.138.13
Slave???????????????????? centos 7.3?????????????? 192.168.138.14
二、在master操作
[root@localhost ~]# yum install mariadb-server -y
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1????????????????? //必須唯一
log-bin=mysql-bin????????? //開啟binlog日志
character-set-server=utf8???????? //設置字符集
? ? ? ? 2.啟動mysql
[root@localhost ~]# systemctl start mariadb
? ? ? ? 3. 授權root用戶
MariaDB [(none)]> grant all on *.* to root@'localhost' identified by '123456';
MariaDB [(none)]> grant all on *.* to root@'%' identified by '123456';
???? ????4. 刷新權限表
MariaDB [(none)]> flush privileges
5.查看master狀態
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File???????????? ????| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |??? 521 |????????????? ?????|????????????????? |
+------------------+----------+--------------+------------------+
???????????
注意:如果主庫中已存在數據,則需要備份拷到從庫保持數據一致性
1.鎖定數據表,避免在備份過程中,表被更新
mysql>LOCK TABLES tbl_name READ;
為表增加一個寫鎖定:
mysql>LOCK TABLES tbl_name WRITE;
解鎖 : mysql>UNLOCK TABLES;
2.備份數據
方法一
Mysqldump? -uroot ?-p –B db1 –T tb1? | gzip ?> /mysqlbackup/tb1.sql.gz
方法二
直接備份datadir=/var/lib/mysql
????????????????????????????????????????????????????????????????????????????????????????
三、?????? 在slave上操作
[root@localhost ~]# yum install mariadb-server -y
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1????????????????? //必須唯一
character-set-server=utf8???????? //設置字符集
? ? ? ? 2. 啟動mysql
[root@localhost ~]# systemctl start mariadb
3. 配置同步參數
MariaDB [(none)]> change master to
?master_host='192.168.138.13',
master_user='root',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=521;
4. 啟動主從同步進程
????????? MariaDB [(none)]> start slave;
? ? ? ? 5. 檢查狀態
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
?????????????? Slave_IO_State: Waiting for master to send event
????????????????? Master_Host: 192.168.138.13
????????????????? Master_User: root
?? ???????????????Master_Port: 3306
??????????????? Connect_Retry: 60
????????????? Master_Log_File: mysql-bin.000003
????????? Read_Master_Log_Pos: 521
?????????????? Relay_Log_File: mariadb-relay-bin.000002
??????????????? Relay_Log_Pos: 529
??????? Relay_Master_Log_File: mysql-bin.000003
???????????? Slave_IO_Running: Yes
??????????? Slave_SQL_Running: Yes
看到兩個yes說明配置成功
四、 測試
? ? ? ? ?1.在slave上查看
? ? ? ? MariaDB [(none)]> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| mysql???? ?????????|
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
2. 在master創建數據庫
MariaDB [(none)]> create database testdb1;
Query OK, 1 row affected (0.00 sec)
3.? 在slave查看
MariaDB [(none)]> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| mysql????????????? |
| performance_schema |
| testdb1??????????? |
+--------------------+
4 rows in set (0.00 sec)
--------------------------------------------------------------------------------------------------------------------------------------------?
?
讀寫分離
一、環境準備(在主從同步基礎上)
? ? ? ? Master?????? centos7.3? ? ? ? ? ? ? ? ? ?192.168.138.13
? ? ? ? Slave???????? centos7.3? ? ? ? ? ? ? ? ? ?192.168.138.14
? ? ? ?Mycat???????? centos7.3? ? ? ? ? ? ? ? ? ? 192.168.138.15
? ? ? ?管理端??????? centos7.3? ? ? ? ? ? ? ? ? ? 192.168.138.16
二、安裝并配置mycat
? ? ? 1.部署jdk環境
? ? ? ? ?MyCAT用Java開發,需要有JAVA運行環境,mycat依賴jdk1.7的環境
? ? ? ? ?1)上傳jdk
? ? ? ? ? ? ? [root@localhost tools]# ll jdk-7u45-linux-x64.tar.gz
? ? ? ? ?2)安裝jdk
? ? ? ? ? ? ? [root@localhost tools]# mkdir /usr/java
? ? ? ? ? ? ? [root@localhost tools]# tar xf jdk-7u45-linux-x64.tar.gz -C /usr/java/
? ? ? ? 3)設置環境變量
? ? ? ? ? ? ?[root@localhost tools]# vim /etc/profile.d/java.sh
? ? ? ? ? ? ?內容如下:
? ? ? ? ? ? ? ?export JAVA_HOME=/usr/java/jdk1.7.0_45/
? ? ? ? ? ? ? ?export PATH=$JAVA_HOME/bin:$PATH
? ? ? ? ? ? ? ?export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
? ? ? ? ? ?使環境變量當前終端生效
? ? ? ? ? ? [root@localhost tools]# source /etc/profile.d/java.sh
? ? ? 4)測試
? ? ? ? ? ?[root@localhost tools]# java -version
? ? ? ? ? ? ?java version "1.7.0_45"
? ? ? ? ? ? Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
? ? ? ? ? ? Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
? ? 2.安裝mycat
? ? ? 1)下載mycat源碼包
? ? ? ? ? [root@localhost ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6
? ? ?2)解壓
? ? ? ? ? [root@localhost ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz? -C /usr/local
? ? ? ? ?解壓內容
? ? ? ? ? [root@localhost ~]# ll /usr/local/mycat/
total 12
drwxr-xr-x 2 root root? 190 Dec? 3 16:17 bin
drwxrwxrwx 2 root root??? 6 Mar? 1? 2016 catlet
drwxrwxrwx 4 root root 4096 Dec? 3 16:17 conf
drwxr-xr-x 2 root root 4096 Dec? 3 16:17 lib
drwxrwxrwx 2 root root??? 6 Oct 28? 2016 logs
-rwxrwxrwx 1 root root? 217 Oct 28? 2016 version.txt
? ? ?3)添加環境變量
[root@localhost local]# cat ?/etc/profile.d/mycat.sh
export PATH=$PATH:/usr/local/mycat/bin
[root@localhost tools]# source /etc/profile.d/mycat.sh
?
? ?3.讀寫分離配置
[root@localhost local]# cd /usr/local/mycat/
[root@localhost mycat]# ls
bin? catlet? conf? lib? logs? version.txt
[root@localhost conf]# cp schema.xml{,.bak}
[root@localhost conf]# vim schema.xml
主要修改:
1)balance="1" writeType="0" switchType="1"
balance
1、balance=0 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writehostle .
2、balance=1 全部的readhost與stand by writeHost 參與select語句的負載均衡。簡單的說,雙主雙從模式(M1->S1,M2->S2,并且M1和M2互為主備),正常情況下,M1,S1,S2都參與select語句的復雜均衡。
3、balance=2 所有讀操作都隨機的在readhost和writehost上分
writeType
負載均衡類型,目前的取值有3種:
1、writeType="0", 所有寫操作發送到配置的第一個writeHost。
2、writeType="1",所有寫操作都隨機的發送到配置的writeHost。
3、writeType="2",不執行寫操作。
switchType
1、switchType=-1 表示不自動切換
2、switchType=1 默認值,自動切換
3、switchType=2 基于MySQL 主從同步的狀態決定是否切換
?
2)在<schema 最后加上dataNode="dn1"
修改<writeHost
修改<readHost
????????? 注:根據自己實際情況,其他無用的就可刪除
配置好的文件如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.138.13:3306" user="root"
password="123456">
<readHost host="hostR1" url="192.168.138.14:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
4、創建管理用戶
1)主庫上對mycat用戶授權如下:
用戶:mycat 密碼:123456 端口:3306
權限:insert,delete,update,select
命令:grant insert,delete,update,select on TD_OA.* to mycat@'192.168.138.%' identified by '123456';
????? flush privileges;
2)從庫上mycat用戶授權如下:
用戶:mycat 密碼:123456 端口:3306/3307
權限: select
grant select on TD_OA.* to mycat@'192.168.138.%' identified by '123456';
flush privileges;
測試環境可以直接使用root用戶,授予所有權限:
mysql> grant all on *.* to root@'192.168.95.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to root@'localhost' identified by '123456';
?
默認配置即可
①這里配置的是可以連接主庫的兩個用戶
用戶:root 密碼:123456 給予此用戶TESTDB數據庫增刪改查的權限。
用戶:user 密碼:user 給予此用戶TESTDB數據庫讀的權限。
②這里的TESTDB,不一定是你數據庫上的真實庫名,可以任意指定,只要接下來和schema.xml的配置文件的庫名統一即可。
?
1. 在客戶端連接mysql主庫服務器:
1)先安裝mysql
2)# mysql -uroot –p123456 -h192.168.138.15 -P8066 -DTESTDB
?
? ? ? 8.主從同步讀寫分離測試
?
1)管理端創建表
[root@localhost ~]# mysql -uroot –p123456 -h192.168.138.16 -P8066 -DTESTDB
CREATE TABLE test1 (id int(10),name varchar(10),address varchar(20) DEFAULT NULL);
手動停止主從同步:(stop slave)
注意:工作中不能這么干
2)讀功能測試:
分別在主從庫插入數據:
master: insert into test1 values(1,'test1','master');
slave1: insert into test1 values(2,'test1','slave1');
3)管理端驗證
負載均衡:
mysql> select * from test1;
+------+-------+---------+
| id | name | address |
+------+-------+---------+
| 2 | test1 | slave1 |
+------+-------+---------+
1 row in set (0.00 sec)
4)寫功能:
管理端再次插入數據
mysql> insert into test1 values(3,'test1','write');
Query OK, 1 row affected (0.00 sec)
在master查看
MariaDB [db1]> select * from test1;
+------+------+---------+
| id?? | name | address |
+------+------+---------+
|??? 1 | test | master? |
|??? 3 | test | write?? |
+------+------+---------+
2 rows in set (0.00 sec)
?
在Slave查看
MariaDB [db1]> select * from test1;
+------+------+---------+
| id?? | name | address |
+------+------+---------+
|??? 2 | test | slave?? |
+------+------+---------+
3 rows in set (0.00 sec)
#注意:測試完畢啟動主從同步功能。
?
?
?
?
?
轉載于:https://www.cnblogs.com/sxchengchen/p/7966046.html
總結
以上是生活随笔為你收集整理的mysql 主从同步-读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 14 测试版/GM 版更新到正式
- 下一篇: MySQL 安全性知识要点