1.环境介绍
确保俩虚拟机centos7时间是同步的;一台虚拟机是另一台拷贝过来后、修改的固定IP;
IP:192.168.255.133
IP:192.168.255.134
2.MySQL数据库准备
安装MySQL5.7.28,配置文件/etc/my.cnf配置四位简单密码;(记得彻底删除其他版本)
安装mysql并修改简单密码,开启3306 22端口
wget [http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm](http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm)
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum install mysql-server
# 等,看网速
service mysqld start
grep "password" /var/log/mysqld.log
mysql -uroot -p # 此处输入从log中查询到的复杂密码
# 输入密码,准备修改密码,下面三步骤,是将验证级别降低,密码长度改成4,然后设置密码为asdf
set global validate_password_policy=0;
set global validate_password_length=4;
set PASSWORD = PASSWORD("asdf");
# 以下查看并开启端口操作(3306、22同理)
firewall-cmd --query-port=3306/tcp
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
/etc/my.cnf配置:
[mysqld]
plugin-load=validate_password.so # 加载插件
validate_password_policy=0 # 强度检查级别为LOW
validate_password_length=4 # 密码长度设置为至少为4
validate-password=FORCE_PLUS_PERMANENT # 永久强制使用插件,以防插件在运行时被删除
直接在配置中写好,这样就不会因为每次重启数据库服务而重新设置简单密码规则;也为之后主从复制中的密码能写成四位简单的做好准备,否则后面创建master用户的密码还要遵循复杂的规则。
3.主从同步——异步同步(默认方式)
主库my.cnf 开启Binlog功能
[mysqld]
server-id=1 # 必须比从库小
log-bin=mysql-bin
从库my.cnf
[mysqld]
server-id=2
log_bin=mysql-bin
replicate_do_table=test.user # 这个是需要同步的表
binlog-ignore-db=mysql # 这个是忽略的不需要同步的库,可以不设置
主库先创建库test表user,主库要建立账号
如果前面主库my.cnf配置好简单密码规则,这里就不要这几句确认了。
set global validate_password_policy=0;
select @@validate_password_policy;
set global validate_password_length=4;
select @@validate_password_length;
grant replication slave on *.* to 'back'@'192.168.255.134' identified by 'asdf'; # 创建一个用户back,密码asdf用来从库对接
show master status;
exit
主库所在虚拟机,备份库,向从库虚拟机传输sql,用来同步数据库
mysqldump -uroot -p test > /root/test.sql
ls /root/test.sql
scp /root/test.sql 192.168.255.134:/root # 密码asdf
从库同步数据
use test; # 从库进mysql的库test
source /root/test.sql # 用sql同步数据
配置master.info(CHANGE MASTER to…相当于配置密码文件和Master的相关信息)
change master to master_host='192.168.255.133',master_user='back',master_password='asdf',master_port=3306,MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=695; # 文件名字和log位置是主库show master status看到的
start slave; # 开启复制功能d
show slave status \G;
发现问题
从库写一条,主库写一条,这时候就不同步了:
错误原因里面写的很清楚
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.255.133
Master_User: back
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 3670
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 2723
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table: test.user
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Could not execute Write_rows event on table test.user; Duplicate entry '8' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 3100
Skip_Counter: 0
Exec_Master_Log_Pos: 2854
Relay_Log_Space: 3750
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1062
Last_SQL_Error: Could not execute Write_rows event on table test.user; Duplicate entry '8' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 3100
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 4b5e1b3a-1af8-11ea-ac00-000c29b986f2
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 191210 14:22:39
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)
ERROR:
No query specified
4.主从同步——半同步
主从的配置在之前的基础上添加开启半同步即可
主库:
进入mysql设置以下两句,当然重启数据库会消失,所以推荐下面修改配置文件的方法,记得重启数据库。
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled = 1;
推荐这种:
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
查看半同步插件是否有 rpl_semi_sync_master这一行即可
mysql> show plugins;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
......
| validate_password | ACTIVE | VALIDATE PASSWORD | validate_password.so | GPL |
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
46 rows in set (0.00 sec)
查看主库半同步是否运行,ON状态即可
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON |
+-----------------------------+-------+
1 row in set (0.01 sec)
从库:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
或推荐:
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
重启从库线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
查看是半同步否在运行
show status like ‘Rpl_semi_sync_slave_status’;
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.01 sec)
然后主库重新查下master的status,让从库根据信息去连接
以下只给一个跑正确的示范:
可以看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两行,有时候是connecting也可以的
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.255.133
Master_User: back
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 695
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table: test.user
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 695
Relay_Log_Space: 531
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: 1
Master_UUID: 4b5e1b3a-1af8-11ea-ac00-000c29b986f2
Master_Info_File: /var/lib/mysql/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:
1 row in set (0.00 sec)
ERROR:
No query specified
5.centos7 Failed to start LSB: Bring up/down networking错误
错误原因:关机问题
systemctl stop NetworkManager
systemctl disable NetworkManager
service network start
即可
6.总结
可能因为后面了解了基础多一些之后再来记录的,有些记得不详细,之后会不断添加修改的。
来源:CSDN
作者:RandolphCYG
链接:https://blog.csdn.net/qq_33997198/article/details/103482345