1.在主机上安装好mysql 方便等一会主从搭建在从机上再安装mysql。可以参考以下链接:
Centos7安装MySQL详细步骤_在centos7上安装mysql_緑水長流*z的博客-CSDN博客
2.对主机centos7(master)做克隆。克隆出 一个slave机。
一路点点点 如果 实在不会。参考一下以下链接(包含centos7的安装以及克隆):
CentOS7安装与克隆_centos克隆_冉半夏生的博客-CSDN博客
3.这边再对克隆的虚拟机的网卡一定要做修改。不然跟主机的ip一样,同时打开会冲突。以下是网卡配置。从机的网卡配置一定要注释掉uuid。
[配置]centos7如何配置网卡_centos7网卡配置_鸭腿面好吃的博客-CSDN博客
4.在对mysql做主从搭建的时候,因为是克隆的 mysql的service-uuid是一样的,这里一定要改,主机从机随边改一个就好。
find / -iname "auto.cnf"
/var/lib/mysql/auto.cnf
#从搜索到的结果路径中修改 service-uuid的值
[auto]
server-uuid=312c2259-f54f-11ed-8a9a-000c29131471
vim /var/lib/mysql/auto.cnf
5.主从机的配置
5.1主机配置mysql配置文件【my.cnf】|【my.ini】
master如下:
[mysqld]
server-id = 1 # 节点ID,确保唯一
log config
log-bin = mysql-bin #开启mysql的binlog日志功能,binlog日志位置
sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 100m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
binlog-do-db=crm #需要同步的数据库
binlog-do-db=test #需要同步的数据库
max_binlog_cache_size= 512m #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1 # 自增值的偏移量
auto-increment-increment = 1 # 自增值的自增量
slave-skip-errors = all #跳过从库错误
slave配置:
[mysqld]
server-id=2
log-bin=mysql-bin #如果从数据库,不需要再往其他数据库同步,可以注释掉
relay-log=slave-relay-bin #必须开启,从主数据库同步的binlog会写入到该目录下
relay-log-index=slave-relay-bin
#如果主从数据库名称相同 (可配多个)
replication-do-db=crm
#如果主从数据库名称不同 (可配多个)
replication-rewrite-db= 主数据库名 -> 从数据库名
5.2 主从机mysql 服务的重启
service mysql restart
5.3 主机mysql中创建远程用户及配置。
假设 master的ip为192.168.2.87 slave的ip为:192.168.2.88.
CREATE USER slave IDENTIFIED BY 'Slave@123';
# 密码过于简单 要修改密码
# 默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符
set global validate_password_policy=0; # 关闭密码复杂性策略
set global validate_password_length=1; # 设置密码复杂性要求密码最低长度为1
select @@validate_password_policy; # 查看密码复杂性策略
select @@validate_password_length; # 查看密码复杂性要求密码最低长度大小
根据自己需求 自己设置mysql 密码策略及长度
#下面的ip是从机的ip 意味着哪个远程ip可以调用主机的master mysql
grant replication SLAVE on *.* to 'slave '@'192.168.2.88' identified by 'Slave@123';
#刷新权限别忘了
flush privileges;
5.4 在主服务器上查看master信息,需要记住【file】和【position】
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 665 | crm | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.5 登陆从服务器mysql,增加从节点需要同步的master信息,其中【master_log_file】和【master_log_pos】是从上一步获取到的两个字段信息。执行以下语句
change master to master_host='192.168.2.87',master_user='slave',master_password='Slave@123',master_log_file='mysql_bin.000002',master_log_pos=665;
参数解释: MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE :设置要连接的主服务器的bin日志的日志名称,即5.4得到的信息
MASTER_LOG_POS :设置要连接的主服务器的bin日志的记录位置,即5.4得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
5.6 在从服务器上启动主从
stop slave;
reset slave;
5.7 查看主从同步状态,没有报错启动成功
show slave status \G;
OR
show slave status;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.87
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: localhost-relay-bin.000010
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 744
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: 312c2259-f54f-11ed-8a9a-000c29131471
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)
5.8 看见下面都是yes 主从就搭建好了。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6 一些错误
一、远传链接不上可能是master主机的端口未打开。
1.开启端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
2.重启防火墙
firewall-cmd --reload
3.查看已经开放的端口
firewall-cmd --list-ports
二、直接关闭防火墙
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
三、从机时克隆的有时候会出现mac一样的情况。我是重新启动从机后出现网关错误。
听网上说是因为我的centos7安装了桌面有了一个NetworkManager 影响到了network的工作。我本人是直接把NetworkManager直接关了就解决问题了。 然后重启网卡就好了