MySQL8.0实现主从集群的配置以及常见错误的处理方法
MySQL8.0实现主从集群的配置以及常见错误的处理方法
MySQL主从的配置,需要两台主机,现假设主机一 的IP地址为192.168.0.12,主机二的IP地址为192.168.0.13,12的主机设置为MySQL主机,13的主机设置为MySQL从属机。由于是需要从12这台机器拉取日志到13这台,必须需要网络间通信,因此,请在开始配置前将防火墙配置好或者关闭防火墙。
首先,在两台机器上安装同一版本的MySQL或者mariadb,初始化以及初始密码和 /etc/my.cnf这个配置文件内所写的配置有关系,在8.0版本之后,需要在my.cnf这个配置文件的mysqld标签下添加字段default_authentication_plugin=mysql_native_password,如果是刚安装完的MySQL8.0,发现my.cnf 文件内没有这项,请务必添加,该字段的来历如下:
在8.0版本前的查询MySQL库的user表的内容,是这样的两个命令,use mysql;&&select user,host,password from user;
在8.0后版本,查询mysql这个数据库的user表的内容,是这样的命令:user mysql;
&& select user,host,authentication_string,plugin from user;
plugin意思为插件,老旧版本是使用mysql_native_password,新的8.0版本是默认使用caching_sha2_password,那么配置文件my.cnf内配置了,以后所有操作都是使用旧版的mysql_native_password。旧版的mysql_native_password修改密码等验证操作相对简单点,并且由于习惯会更容易使用。下面开始正式的配置、
第一,主服务器的配置(192.168.0.12)
1,vim /etc/my.cnf 在mysqld标签下添加如下字段:
log-bin=mysql-bin
server-id=12
保存退出,执行命令,service mysql restart
使用原始密码进入数据库,
2,USE mysql; &&ALTER USER [email protected]'localhost' IDENTIFIED BY 'shiguang32';
这一步和原来的8.0前版本是一样的,修改root密码。
3.UPDATE USER SET HOST='%' WHERE USER='root';
这一步和原来的8.0前版本是一样的,修改root密码。
4,CREATE USER 'slave'@'192.168.0.13' IDENTIFIED WITH mysql_native_password BY '123456';
创建一个名字为slave的用户,密码是123456,该用户只可以在192.168.0.13登录
5,GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.13';
赋予slave用户读取日志的权限
6,show master status;
输出的结果为(这些很重要哦,这样操作后,该机器不要重启mysql服务,否则数值会改变):
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 533 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
二,从服务器,slave服务器的配置(192.168.0.13):
1,vim /etc/my.cnf 在mysqld标签下添加如下字段:
log-bin=mysql-bin
server-id=12
保存退出,执行命令,service mysql restart
使用原始密码进入数据库,
2,USE mysql; &&ALTER USER [email protected]'localhost' IDENTIFIED BY 'shiguang32';
这一步和原来的8.0前版本是一样的,修改root密码。
3.UPDATE USER SET HOST='%' WHERE USER='root';
这一步和原来的8.0前版本是一样的,修改root密码。
4,stop slave; &&CHANGE MASTER TO MASTER_HOST='192.168.0.12',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=533;
保存服务器所给的授权在本地,这一步极为重要,密码在服务器设置过,不要写错,第七步所查询的两个值分别填写进去,
5,START SLAVE; && SHOW SLAVE STATUS \G;
输出的结果为:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.12
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 533
Relay_Log_File: centos4-relay-bin.000002
Relay_Log_Pos: 700
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes ###这里必须是yes,如果有错,可能会为no或者connecting
Slave_SQL_Running: Yes ###这里也必须是yes,别的不好使,这两项必须同时为yes ,算配置成功
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0#有多少错误就显示几,0当然最好了。
Last_Error: #如果有什么错误,会在这显示,没有显示是好事情。
Skip_Counter: 0
Exec_Master_Log_Pos: 533
Relay_Log_Space: 910
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: 12
Master_UUID: ba0d9f03-c8cb-11ea-a636-000c29e17c58
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
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:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
ERROR:
No query specified
关于那两个yes的问题,如果第一个不是yes,那么排查网络,看通不通。检查ip是否写对。
如果是第二个不是yes,那么重新执行第四步,检查用户名,密码,file,log_pos 这四项,是否和 在master主机上执行show master status;这个的结果都一致么?