mysql 实现主从复制的异常解决
window平台下要想实现主从复制,首先得有主和从
- 找到主从计算机(服务器)的IP地址,以便实现两个之间的联通;
- 有了主从,主从上都要有mysql,版本最好一致,不然数据复制过程中会出现一些意外情况;
查看本机IP地址的方法
打开cmd 输入ipconfig/all
- 配置主服务器
配置前检查一下数据库文件的存放地址;
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%datadir%';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| datadir | D:\MySqlData\Data\ |
+---------------+--------------------+
1 row in set, 1 warning (0.00 sec)
①开启binlog日志
找到配置文件所在位置 我的环境中是C:\ProgramData\MySQL\MySQL Server 8.0
关闭mysql服务。然后再修改my.ini
修改内容如下, 以记事本打开my.ini
[mysqld]之后添加如下内容
log_bin="D:/MySqlData/binlog #log的地址
expire_logs_days =10 #log的删除天数
max_binlog_size =100M #log文件最大的大小
另存为–my.ini(最好是另存为,同时可以检查该文件的另存为后的编码方式 --ansi)
开启mysql 服务并登录
检查二进制文件配置是否成功(log_bin 为 on则开启成功)
mysql> show variables like '%log_bin%' ;
+---------------------------------+--------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------+
| log_bin | ON |
| log_bin_basename | D:\MySqlData\Data\HWL-2020-bin |
| log_bin_index | D:\MySqlData\Data\HWL-2020-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------------+
6 rows in set, 1 warning (0.00 sec)
- 在主机上配置 所需要的账户,(如果有的话,那就不需要配置了,这里顺带复习一下创建用户)
mysql> create user 'user_log'@'%' identified by '123456' ;
Query OK, 0 rows affected (0.03 sec)
配置完毕再授予可复制从机权限(8.0之后在授权的时候创建用户会出错)
如下-----
mysql> grant replication slave on . to ‘user_l’@’%’ identified by ‘123456’ ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘identified by ‘123456’’ at line 1
mysql> grant replication slave on *.* to 'user_log'@'%' ;
Query OK, 0 rows affected (0.00 sec)
5.配置主机信息
①退出mysql②并关闭主机的mysql服务③配置my.ini
配置my.ini内容如下
server-id=1 #服务器标识
binlog-do-db=hxjy # 需要复制的数据库
bin-ignore-db=mysql#忽略的数据库(即不需要复制的数据库)
配置完毕后重启mysql服务,登录mysql,检查主机状态;
mysql> show master status \G
*************************** 1. row ***************************
File: HWL-2020-bin.000006
Position: 689
Binlog_Do_DB: hxjy
Binlog_Ignore_DB: mysql
Executed_Gtid_Set:
1 row in set (0.00 sec)
- 将master主机的数据备份出来,然后导入到slave从机中去 (如果导出错误请检查导出地址是否符合mysql安全要求)
登录数据库检查—secure_file_priv 的值
mysql> show variables like ‘%secure%’
-> ;
±-------------------------±--------------+
| Variable_name | Value |
±-------------------------±--------------+
| require_secure_transport | OFF |
| secure_file_priv | C:\mysqlback\ |
±-------------------------±--------------+
2 rows in set, 1 warning (0.00 sec)
1 row in set (0.00 sec)
mysql> exit
Bye
C:\Users\Administrator>mysqldump -u root -p company hxjy >C:/mysqlback/hxjy.txt
Enter password: ******
-
配置slave从机的信息
停止slave从机的mysql服务
找到slave从机的my.ini 做如下修改
[mysqld]
default-character-set=utf8 #设置从机的默认编码
log_bin=“D:/mysqlback/binlog” #设置从机的二进制文件存放地址
expire_logs_days=10
max_binlog_size=100M
[mysqld]#新添加的
server_id=2#写在新添加的后面,如果有其他binlog配置可以注释掉 -
重启slave 的mysql服务,登录slave, 关闭slave服务
mysql> stop slave ;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
- 设置slave从机实现复制的相关信息
mysql> change master to
-> master_host='182.168.0.208' ,
-> master_user='user_log',
-> master_password='123456',
-> master_log_file='HWL-2020-bin.000006',#要复制的二进制文件名
-> master_log_pos=150;#偏移量
Query OK, 0 rows affected, 7 warnings (0.03 sec)
如果出现错误,那么检查一下主机的日志文件名与位置是否正确,
mysql> show master status \G
*************************** 1. row ***************************
File: HWL-2020-bin.000006
Position: 689
Binlog_Do_DB: hxjy
Binlog_Ignore_DB: mysql
Executed_Gtid_Set:
1 row in set (0.00 sec)
- 验证阶段–在主机上数据库hxjy 下建立表,插入数据检查从机上数据是否同步过去了