mysql的主從、半主從、主主複製配置詳細


MySQL的主從、半主從、主主複製配置詳細



實驗拓撲圖模型:


wKioL1TDjwKSMEjUAADQ4mhWVfg530.jpg


############################【實驗MySQL服務器的主從複製:】#######################################

###########################修改主配置文件##########################################
[root@director2 ~ ]#vim /etc/mysql/my.cnf
[mysqld]
 42 thread_concurrency= 8
 43 innodb_file_per_table = on
 44 datadir = /mydata                      ###############庫目錄
 45 skip_name_resolve = on                 ###############不反解主機名
 59 log-bin=mysql-bin                      ###############啓用二進制日誌
 67 server-id   = 1                        ###############唯一ID

[root@director2 ~ ]# chkconfig --list mysqld            #####保證mysqld的開啓自啓動
mysqld   0:off        1:off        2:on        3:on        4:on        5:on        6:off

############################授權一個有複製權限的用戶##############################################

mysql> grant replication client,replication slave on *.* to 'cpuser'@'172.16.249.106' identified by "magedu";
Query OK, 0 rows affected (0.08 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

###########################從節點準備#############################################################

[root@node2 ~ ]# groupadd -g 306 mysql
[root@node2 ~ ]# useradd -g 306 -u 306 mysql
[root@node2 ~ ]# mkdir /mydata
[root@node2 ~ ]# cd /mydata/
[root@node2 / ]# chown -R mysql:mysql /mydata/
[root@node2 / ]# chmod -R a+w /mydata/

###################主節點:把mysql文件傳輸給主節點################################################

[root@node2 mysql ]#id mysql
uid=306(mysql) gid=306(mysql) groups=306(mysql)
[root@node2 mysql ]#ll /mydata
total 0
[root@node2 mysql ]#ll -d /mydata
drwxrwxrwx 2 mysql
mysql 4096 Jan 23 11:03 /mydata
[root@node2 mysql ]#mkdir /etc/mysql
[root@node2 mysql ]# scripts/mysql_install_db --user=mysql --datadir=/mydata ###初始化
[root@director2 ~ ]# scp /etc/mysql/my.cnf 172.16.249.106:/etc/mysql/  ###把主節點的配置文件拷貝過來
[root@node2 / ]# vim /etc/mysql/my.cnf               ####編輯從節點的配置文件
59 #log-bin=mysql-bin                                ####從節點不啓用二禁止日誌
 67 server-id   = 20                                 ####server-id保持唯一
 68 relay-log = relay-bin                            ####從節點開啓中繼日誌
 69 read-only =on                      ####只讀模式開啓(注意:這個只能限制普通用戶)

方法二:此處也可以直接施加讀鎖。在mysql> lock tables testdb read;

mysql> show variables like 'relay%';        #####中繼日誌開啓了
+-----------------------+--------------------+
| Variable_name         | Value              |
+-----------------------+--------------------+
|
relay_log             | relay-bin            |
|
relay_log_index       |                      |
|
relay_log_info_file   | relay-log.info       |
|
relay_log_purge       | ON                   |
|
relay_log_recovery    | OFF                  |
|
relay_log_space_limit | 0                    |
+-----------------------+--------------------+
mysql> show variables like "read%";    
#############只讀模式開啓
+----------------------+---------------------+
|
Variable_name        | Value                 |
+----------------------+---------------------+
|
read_buffer_size     | 1048576               |
|
read_only            | ON                    |
|
read_rnd_buffer_size | 4194304               |
+----------------------+---------------------+

#############################至此主從各單個節點配置結束########################################

 

#############################配置從連接主#######################################################

#####主節點查看二進制文件的存儲位置

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB |                
  Binlog_Ignore_DB |                                            |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |   501    |              |                  |                 
+------------------+----------+--------------+------------------+
1 row in set (0.04 sec)
######################################建立主從連接#######################################
mysql> change master to master_host='172.16.249.122',master_user='cpuser',master_password='magedu',master_log_file='mysql-bin.000003',master_log_pos=501;
mysql> show slave status\G;              #####查看當前從節點狀態
***************************1. row ***************************
Slave_IO_State:
Waiting for master to send event
Master_Host:172.16.249.122
Master_User: cpuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:mysql-bin.000003
Read_Master_Log_Pos:501
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes               ###IO線程啓用
Slave_SQL_Running: Yes              ###SQL線程已經啓用

#############################################測試結果##############################################

######主節點創建庫

mysql> create database testdb;
Query OK, 1 row affected (0.03 sec)
mysql> use testdb;
Database changed

此時從節點已經同步了:

wKiom1TDih-xPOOnAADPc1_cyxY973.jpg

############################################創建一個表############################################

mysql> create table students(id tinyint unsigned not null auto_increment unique key);
Query OK, 0 rows affected (0.25 sec)

wKioL1TDiyOzZgFBAACdLGELvmI678.jpg

總結步驟:::

【主服務器】

1,主服務器的server-id,保持唯一。

2,開啓二進制日誌。

3,授權一個可以複製的用戶,最小權限使用,指向從服務器最好。

【從服務器】

1,關閉二進制日誌,開啓中繼日誌

2,保持唯一的server-id

3,爲了防止從服務器寫入數據,開啓只讀模式。

4,連接主服務器,指定主服務器Ip,授權的用戶,密碼,上一次的二進制文件的位置。

5,開啓IO,SQL線程。

########################################【半主從模式】########################################

##############此處的半主從是在主從的基礎上的半同步:

1,條件是有一個從服務器,他和主服務器同樣的寫同步,如果同步超時,把這個從這個從節點降級爲異步。恢復正常的狀態。

【完成半同步,需要的是步驟是各自的插件】

[root@node2 plugin]# pwd
/usr/local/mysql/lib/plugin
[root@node2 plugin ]# semisync_master.so(主節點的插件)   semisync_slave.so (從節點的插)

主節點:安裝插件

此時全局參數變多了

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.15 sec)
mysql> show global variables like '%semi%';      
#####安裝好了之後,生成很多變量
+------------------------------------+---------------------+
| Variable_name                      |   Value             |
+------------------------------------+---------------------+
| rpl_semi_sync_master_enabled       | OFF                 | 表示雖然安裝,但是沒有啓用
| rpl_semi_sync_master_timeout       | 10000               |  ###探測主的超時時長
| rpl_semi_sync_master_trace_level   | 32                  | ####追蹤級別
| rpl_semi_sync_master_wait_no_slave | ON                  | ####等待從服務器的上線的時間
+------------------------------------+---------------------+
mysql> set global rpl_semi_sync_master_enabled=1; #####啓用這個插件
Query OK, 0 rows
affected (0.00 sec)
mysql> set global
rpl_semi_sync_master_timeout=2000;
Query OK, 0 rows
affected (0.00 sec)

【從節點安裝插件配置】

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.10 sec)
mysql> show global variables like '%semi%';
+---------------------------------+-------------------+
|Variable_name                    | Value             |
+---------------------------------+-------------------+
| rpl_semi_sync_slave_enabled     | OFF               | ###插件未啓用
| rpl_semi_sync_slave_trace_level | 32                |
+---------------------------------+-------------------+
mysql> set global rpl_semi_sync_slave_enabled=1;  
####啓用插件
Query OK, 0 rows affected (0.00 sec)

###############################至此兩個節點的插件全部安裝,啓用完畢###############################

mysql> show
global status like '%semi%';
+--------------------------------------------+-----------------------------+
|Variable_name                               | Value                       |
+--------------------------------------------+-----------------------------+
| Rpl_semi_sync_master_clients               | 0                           |  
| Rpl_semi_sync_master_net_avg_wait_time     | 0                           |
| Rpl_semi_sync_master_net_wait_time         | 0                           |
| Rpl_semi_sync_master_net_waits             | 0                           |
| Rpl_semi_sync_master_no_times              | 0                           |
| Rpl_semi_sync_master_no_tx                 | 0                           |
| Rpl_semi_sync_master_status                | ON                          | 
| Rpl_semi_sync_master_timefunc_failures     | 0                           |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0                           |
| Rpl_semi_sync_master_tx_wait_time          | 0                           |
| Rpl_semi_sync_master_tx_waits              | 0                           |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0                           |
| Rpl_semi_sync_master_wait_sessions         | 0                           |
| Rpl_semi_sync_master_yes_tx                | 0                           |
+--------------------------------------------+-----------------------------+
mysql> stop slave
IO_THREAD;
Query OK, 0 rows
affected (0.00 sec)
mysql> start
slave IO_THREAD;
Query OK, 0 rows
affected (0.00 sec)

再次查看已經啓用了。下面直接測試使用即可######

wKiom1TDkYLzZmMWAADmr8LJkfg208.jpg


##################################【實驗二雙主模式的實現】######################################

#################還是用的之前兩臺主機,重新初始化重新配置

1,雙節點各自使用不同的server id

2, 都啓用binlog relay log

3,自動自動增長的id字段的增長特殊定義:

3, 都授權有複製權限的用戶賬號

修改節點一的配置文件

節點一:配置文件

[root@director2 ~ ]#vim .my.cnf
59 log-bin=mysql-bin                          ####開啓二進制日誌
67 server-id = 10                             ####服務器唯一ID
68 relay-log=relay-bin                         ####開啓中繼日誌,因爲互爲主從
69 auto_increment_offset=1             ####指定日誌的初始偏移量
70 auto_increment_increment=2     ####每次的偏移步長
[root@director2 bin ]# mysql      
mysql> grant replication slave,replication client on *.* to 'cpuser'@'%' identified by 'magedu';Query OK, 0 rows affected (0.04 sec)   ####給節點授權一個可鏈接用戶
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------------------------+
|File              | Position | Binlog_Do_DB | Binlog_Ignore_DB                   |
+------------------+----------+--------------+------------------------------------+
|mysql-bin.000003  |     1796 |              |                                    |
+------------------+----------+--------------+------------------------------------+
mysql> change master to master_host='172.16.249.106',master_user='cpuser',master_password='magedu',master_log_file='mysql-bin.000001',master_log_pos=493;
Query OK, 0 rows affected (0.10 sec)
mysql> start slave;

【節點二的配置文件】

59 log-bin=mysql-bin                       ####開啓二進制日誌
67 server-id   = 20                             ####區別節點一的ID
68 relay-log = relay-bin                    ####開啓中繼日誌(也有從的角色)
69 auto-increment_offset =2         ####自增其實位置
70 auto-increment_increment=2  ####自增的步長
[root@node2 mysql ]# mysql
mysql> grant replication slave,replication client on *.* to 'cpuser'@'%' identified by'magedu';
mysql> flush privileges;
mysql> change master to
mysql> show master status;
+------------------+----------+--------------+-------------------------------+
|File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+------------------+----------+--------------+-------------------------------+
|mysql-bin.000001  |      493 |              |                               |
+------------------+----------+--------------+-------------------------------+
master_host='172.16.249.122',master_user='cpuser',master_password='magedu',master_log_file='mysql-bin.000003',master_log_pos=1796;
Query OK, 0 rows affected (0.07 sec)
mysql> start slave;

##################節點一創建數據庫tb1

wKiom1TDk3HhFpJzAAB1NDuVKm8355.jpg

##################節點二可以立即同步

wKioL1TDlJbT3JvQAACp1xOrv2M487.jpg

##################節點二:在這個庫裏面創建表

wKiom1TDk_nw6YOaAAB5VhSGquQ631.jpg

##################並且插入數據1

wKiom1TDlCCQfpynAACLYcHqx7Y905.jpg

##################節點一,已經同步

wKioL1TDlVzxlAEbAABtvfeT_30207.jpg




至此雙主模式模式也實現完畢!!!!!!!!!!!!!









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章