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中新建表或者修改表数据,立刻就会看到从服务器发生同步
五、常见错误