windows_server_R2下mysql5.7主從複製(主備複製)

環境介紹
Master環境介紹
1)操作系統:windows_server_R2
2)Mysql版本:5.7.23
3)IP:10.0.1.53

Slave環境介紹:
1)操作系統:windows_server_R2
2)Mysql版本:5.7.23
3)IP:10.0.0.54
設置jdk環境變量和mysql環境變量
jdk環境變量配置共包括三項:JAVA_HOME、CLASSPATH 、PATH、MYSQL_HOME。配置過程如下:
右鍵點擊“我的電腦”(有的系統叫“計算機”、“此電腦”等等),屬性 —> 高級系統設置 —> 環境變量,在“系統變量”欄下進行以下操作
在這裏插入圖片描述
在這裏插入圖片描述
1.新建

變量名:JAVA_HOME

變量值:jdk安裝路徑,如:C:\Program Files\Java\jdk1.8.0_181

2.新建

變量名:CLASSPATH

變量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

3.編輯

變量名:Path

變量值:在原有的值後面加上:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%MYSQL_HOME%\bin
4.新建

變量名:MYSQL_HOME

變量值:mysql安裝路徑,如:C:\mysql-5.7.23-winx64\

Mysql解壓版安裝
找到mysql安裝目錄,創建my.ini,並且將my.ini移至bin目錄下(my.ini文件內容如下)。

[Client]
port = 3306
[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
[mysql]
 
default-character-set=utf8 

啓動命令行,將目錄切換到mysql安裝目錄的bin目錄下。在命令行執行命令:mysqld --initialize --user=mysql --console,結果如下圖所示
在這裏插入圖片描述
記住這個 臨時密碼

接下來在控制檯以命令行輸入: mysqld --install,進行安裝服務操作。

安裝成功後,使用net start mysql或去服務中找到MYSQL的服務,進行啓動。
如果發生錯誤:
在這裏插入圖片描述
輸入命令行mysql -uroot -p,利用之前的臨時密碼輸入即可登錄數據庫

SET PASSWORD = PASSWORD('123456');
update mysql.user set Host='%' where HOST='localhost' and User='root';
flush privileges;

前提條件是主從端mysql的數據是一模一樣的起始數據庫內容(表、字段、內部值都必須一樣!)
Master配置
1)my.ini配置

[Client]
port = 3306
[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64\
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

## replication
server_id=53
binlog-ignore-db=mysql
log-bin=master-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=30
 
[mysql]
 
default-character-set=utf8 

重啓mysql

net stop mysql
net start mysql

在主服務器上建立帳戶並授權slave

mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* to 'mysqlsync'@'%' identified by '123456';
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
##把數據表先鎖住,不讓Position 變化!

mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| master-mysql-bin.000001 |      434 |              | mysql            |                   |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Slave配置
1)my.ini配置

[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

server_id=53     
binlog-ignore-db=mysql
log-bin=mysql-slave-bin
binlog_cache_size = 1M
binlog_format=mixed      ##mixed是開啓混合同步模式
expire_logs_days=30
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1

[mysql]
default-character-set=utf8

2)重啓mysql

net stop mysql
net start mysql

配置從服務器Slave:

mysql -uroot -p
change master to 
master_host='10.0.1.53',
master_user='mysqlsync',
master_password='123456',
master_port=3306,
master_log_file='master-mysql-bin.000001',
master_log_pos=434,
master_connect_retry=30;

//注意不要斷開,“434”無單引號,master_host的地址一定不能寫錯!

mysql> start slave;    #啓動從服務器複製功能
Query OK, 0 rows affected (0.00 sec)

回到Master端,解鎖數據表

mysql> unlock tables;

回到從服務器檢查從服務器複製功能狀態:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.1.53
                  Master_User: mysqlsync
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: master-mysql-bin.000003
          Read_Master_Log_Pos: 434
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 327
        Relay_Master_Log_File: master-mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 434
              Relay_Log_Space: 534
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 51
                  Master_UUID: aaadc62e-eccc-11e9-b77a-000c29374cbe
             Master_Info_File: C:\mysql-5.7.23-winx64\data\master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more up
dates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

特別注意:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態。
如果出現

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

但是mysql主從依然不能同步數據時

#停止slave服務
mysql> stop slave;
#跳過一步錯誤,後面的數字可變,如果還不行可執行多次
mysql> set global sql_slave_skip_counter =1;
#開始slave服務
mysql> start slave;
#查看slave狀態
mysql> show slave status\G
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章