windows10单机使用mysql8实现主从复制

一、在windows10下开启两个MySQL实例,端口3306作为主服务器,端口3307作为从服务器,具体安装参看:https://www.cnblogs.com/simon-xie/p/13763145.html

二、主服务器配置

1、my.ini

 1 [mysqld]
 2 # 设置3306端口
 3 port=3306
 4 # 设置mysql的安装目录
 5 basedir=E:\green\mysql-8.0.21-3306
 6 # 设置mysql数据库的数据的存放目录
 7 datadir=E:\green\mysql-8.0.21-3306\Data
 8 # 允许最大连接数
 9 max_connections=200
10 # 允许连接失败的次数。
11 max_connect_errors=10
12 # 服务端使用的字符集默认为utf8mb4
13 character-set-server=utf8mb4
14 # 创建新表时将使用的默认存储引擎
15 default-storage-engine=INNODB
16 # 默认使用“mysql_native_password”插件认证
17 #mysql_native_password
18 default_authentication_plugin=mysql_native_password
19 #指定不需要ONLY_FULL_GROUP_BY
20 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
21 
22 #---------------下面配置mysql主从复制--------------------------
23 ## 同一局域网内注意要唯一
24 server-id=100  
25 ## 开启二进制日志功能,可以随便取(关键)
26 log-bin=master-bin
27 ## 复制过滤:不需要备份的数据库,多个数据库用逗号分割
28 binlog-ignore-db=mysql
29 ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
30 binlog_cache_size=1M
31 ## 主从复制的格式(mixed,statement,row,默认格式是statement)
32 binlog_format=mixed
33 
34 log_bin-index=master-bin.index
35 
36 
37 [mysql]
38 # 设置mysql客户端默认字符集
39 default-character-set=utf8mb4
40 
41 [client]
42 # 设置mysql客户端连接服务端时默认使用的端口
43 port=3306
44 default-character-set=utf8mb4

2、启动主服务器后,使用命令mysql -u root -p进入mysql控制台进行如下操作

 1 mysql> use mysql;
 2 mysql> update user set host='%' where user='root' ;
 3 Query OK, 1 row affected (0.36 sec)
 4 Rows matched: 1  Changed: 1  Warnings: 0
 5 mysql> grant all privileges on *.* to 'root'@'%' ;
 6 Query OK, 0 rows affected (1.80 sec)
 7 
 8 mysql> select user ,grant_priv from user ;
 9 +------------------+------------+
10 | user             | grant_priv |
11 +------------------+------------+
12 | root             | Y          |
13 | mysql.infoschema | N          |
14 | mysql.session    | N          |
15 | mysql.sys        | N          |
16 +------------------+------------+
17 4 rows in set (0.00 sec)
18 mysql>  grant replication slave, replication client on *.* to 'root'@'%';
19 Query OK, 0 rows affected (0.00 sec)
20 mysql > flush privileges;
21 mysql> show master status;
22 +-------------------+----------+--------------+------------------+-------------------+
23 | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
24 +-------------------+----------+--------------+------------------+-------------------+
25 | master-bin.000001 |      446 |              | mysql            |                   |
26 +-------------------+----------+--------------+------------------+-------------------+
27 1 row in set (0.00 sec)

三、从服务器配置

1、my.ini

 1 [mysqld]
 2 # 设置3307端口
 3 port=3307
 4 # 设置mysql的安装目录
 5 basedir=E:\green\mysql-8.0.21-3307
 6 # 设置mysql数据库的数据的存放目录
 7 datadir=E:\green\mysql-8.0.21-3307\Data
 8 # 允许最大连接数
 9 max_connections=200
10 # 允许连接失败的次数。
11 max_connect_errors=10
12 # 服务端使用的字符集默认为utf8mb4
13 character-set-server=utf8mb4
14 # 创建新表时将使用的默认存储引擎
15 default-storage-engine=INNODB
16 # 默认使用“mysql_native_password”插件认证
17 #mysql_native_password
18 default_authentication_plugin=mysql_native_password
19 #指定不需要ONLY_FULL_GROUP_BY
20 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
21 
22 #------------------从库配置-------------------------
23 ## 设置server_id,注意要唯一
24 server-id=102
25 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
26 log-bin=slave-bin
27 ## relay_log配置中继日志
28 relay_log=slave-relay-bin
29 ##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
30 binlog-ignore-db=mysql
31 ## 如果需要同步函数或者存储过程
32 log_bin_trust_function_creators=true
33 ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
34 binlog_cache_size=1M
35 ## 主从复制的格式(mixed,statement,row,默认格式是statement)
36 binlog_format=mixed
37 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
38 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
39 slave_skip_errors=1062
40 
41 
42 [mysql]
43 # 设置mysql客户端默认字符集
44 default-character-set=utf8mb4
45 
46 [client]
47 # 设置mysql客户端连接服务端时默认使用的端口
48 port=3307
49 default-character-set=utf8mb4

2、启动主服务器后,使用命令mysql -u root -p进入从服务器mysql控制台进行如下操作

 1 mysql> change master to master_host='127.0.0.1', master_user='root', master_password='root', master_port=3306, master_log_file='master-bin.000001',master_log_pos=446;
 2 Query OK, 0 rows affected, 1 warning (2.51 sec)
 3 #启动主从复制
 4 mysql> start slave;
 5 Query OK, 0 rows affected (0.07 sec)
 6 #查看连接状态
 7 mysql> show slave status\G;
 8 *************************** 1. row ***************************
 9                Slave_IO_State: Waiting for master to send event
10                   Master_Host: 127.0.0.1
11                   Master_User: root
12                   Master_Port: 3306
13                 Connect_Retry: 60
14               Master_Log_File: master-bin.000001
15           Read_Master_Log_Pos: 544282
16                Relay_Log_File: slave-relay-bin.000002
17                 Relay_Log_Pos: 544161
18         Relay_Master_Log_File: master-bin.000001
19              Slave_IO_Running: Yes
20             Slave_SQL_Running: Yes
21               Replicate_Do_DB:
22           Replicate_Ignore_DB:
23            Replicate_Do_Table:
24        Replicate_Ignore_Table:
25       Replicate_Wild_Do_Table:
26   Replicate_Wild_Ignore_Table:
27                    Last_Errno: 0
28                    Last_Error:
29                  Skip_Counter: 0
30           Exec_Master_Log_Pos: 544282
31               Relay_Log_Space: 544370
32               Until_Condition: None
33                Until_Log_File:
34                 Until_Log_Pos: 0
35            Master_SSL_Allowed: No
36            Master_SSL_CA_File:
37            Master_SSL_CA_Path:
38               Master_SSL_Cert:
39             Master_SSL_Cipher:
40                Master_SSL_Key:
41         Seconds_Behind_Master: 0
42 Master_SSL_Verify_Server_Cert: No
43                 Last_IO_Errno: 0
44                 Last_IO_Error:
45                Last_SQL_Errno: 0
46                Last_SQL_Error:
47   Replicate_Ignore_Server_Ids:
48              Master_Server_Id: 100
49                   Master_UUID: 7b38c6e1-64d0-11ed-b7e2-68f728b9a046
50              Master_Info_File: mysql.slave_master_info
51                     SQL_Delay: 0
52           SQL_Remaining_Delay: NULL
53       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
54            Master_Retry_Count: 86400
55                   Master_Bind:
56       Last_IO_Error_Timestamp:
57      Last_SQL_Error_Timestamp:
58                Master_SSL_Crl:
59            Master_SSL_Crlpath:
60            Retrieved_Gtid_Set:
61             Executed_Gtid_Set:
62                 Auto_Position: 0
63          Replicate_Rewrite_DB:
64                  Channel_Name:
65            Master_TLS_Version:
66        Master_public_key_path:
67         Get_master_public_key: 0
68             Network_Namespace:
69 1 row in set (0.00 sec)

第一行:

change master to master_host='127.0.0.1', master_user='root', master_password='root', master_port=3306, master_log_file='master-bin.000001',master_log_pos=446;
master_host:主服务器地址
master_log_file:主服务器执行show master status;命令看到的File名称
master_log_pos:主服务器执行show master status;看到的Position也就是从哪个位置开始复制

3、停止复制:mysql>stop slave;

 

 

四、测试

在master中新建表或者修改表数据,立刻就会看到从服务器发生同步

五、常见错误

 

 

posted @ 2022-11-15 19:24  疯狗强尼  阅读(430)  评论(0编辑  收藏  举报