Mysql数据库主从搭建

机器准备

准备三台centos7机器,已安装mysql5.7

三台机器的ip分别为:

  • 192.168.39.129 主
  • 192.168.39.130 从
  • 192.168.39.131 从

安装可参考文章https://blog.csdn.net/hzau_itdog/article/details/107560301

在三台机器上分别创建1个数据库readwrite,字符编码为utf8:

CREATE DATABASE `readwrite` CHARACTER SET utf8 COLLATE utf8_general_ci;

master 节点配置

在192.168.39.129 上配置

vim /etc/my.cnf

 

#server-id给数据库服务的唯一标识
server-id=1
##log-bin设置此参数表示启用binlog功能,并指定路径名称
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
#设置日志的过期天数
expire_logs_days=7
binlog-do-db=readwrite
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
  • 这里的server-id用于标识唯一的数据库,在从库必须设置为不同的值。
  • binlog-ignore-db:表示同步的时候忽略的数据库
  • binlog-do-db:指定需要同步的数据库

重启mysql,配置生效,执行以下的命令:systemctl restart mysqld

重启成功后,登录mysql。

赋予从库权限账号,允许用户在主库上读取日志,赋予192.168.39.130和192.168.39.131也就是Slave机器有File权限, 只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。

mysql> grant FILE on *.* to 'hzau'@'192.168.39.130' identified by 'Hzau@2020';
mysql> grant replication slave on *.* to 'hzau'@'192.168.39.130' identified by 'Hzau@2020';
mysql> flush privileges;

mysql> grant FILE on *.* to 'hzau'@'192.168.39.131' identified by 'Hzau@2020';
mysql> grant replication slave on *.* to 'hzau'@'192.168.39.131' identified by 'Hzau@2020';
mysql> flush privileges;

重启mysql(systemctl restart mysqld),登录mysql,查看主库信息

 

File是同步会使用到的binlog文件,Position是同步的时候也要用到的。

 

 

配置从库

1、修改/etc/my.conf 

log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=readwrite
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

注意:两个从库的server-id不一样,需要唯一。

2、修改完/etc/my.cnf后,重启一下mysql(systemctl restart mysqld)

3、进入Slave的mysql控制台,执行下面操作:

stop slave;
change master to master_host='192.168.39.129',master_user='hzau',master_password='Hzau@2020',master_log_file='mysql-bin.000002', master_log_pos=154;
start slave;

4、查看从库状态

show slave status;

上面的信息有Slave_IO_Running: No和Slave_SQL_Running: Yes,证明主从同步失败。 

5、查看错误日志

 

cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid



log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=readwrite
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

错误日志在 /var/log/mysqld.log

查看错误日志

2020-07-27T01:19:20.559519Z 24 [Note] Slave SQL thread for channel '' initialized, starting replication in log 'mysql-bin.000003' at position 154, relay log './localhost-relay-bin.000001' position: 4
2020-07-27T01:19:20.567347Z 23 [Note] Slave I/O thread for channel '': connected to master 'hzau@192.168.39.129:3306',replication started in log 'mysql-bin.000003' at position 154
2020-07-27T01:19:20.570177Z 23 [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;

提示 Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;

他们的auto.cnf中的server-uuid是一样的

主库

从库

 

问题解决

停止从库的mysqld服务,删除他的 /var/lib/mysql/auto.cnf文件,再启动数据库服务即可:

[root@localhost mysql]# systemctl stop mysqld.service

[root@localhost mysql]# mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

[root@localhost mysql]# systemctl start mysqld.service

重新执行下面命令 

 

Slave_IO_Running: Yes和Slave_SQL_Running: Yes,证明主从同步成功。

在主库中建表插入数据可以看到,从库中也有这条数据。

 

查考资料: https://www.fangzhipeng.com/db/2019/06/25/mysql-install-ms.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是一种常用的数据库复制技术,用于实现数据的备份、读写分离和负载均衡。下面是一种简单的MySQL主从搭建步骤: 1. 确保主服务器和从服务器上都安装了MySQL数据库,并且版本一致。 2. 在主服务器上编辑MySQL配置文件(my.cnf),启用二进制日志功能。在配置文件中添加以下内容: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` `log-bin`参数指定二进制日志文件的名称,`server-id`参数指定主服务器的唯一ID。 3. 重启主服务器使配置生效。 4. 在主服务器上创建一个用于复制的用户,并授予适当的权限。例如,可以使用以下命令创建用户并授予权限: ``` CREATE USER 'replication_user'@'slave_ip' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip'; FLUSH PRIVILEGES; ``` `slave_ip`是从服务器的IP地址,`password`是用户的密码。 5. 在主服务器上执行以下命令,获取当前二进制日志文件和位置的信息: ``` SHOW MASTER STATUS; ``` 记下输出结果中的文件名和位置信息,稍后在从服务器上配置时会使用。 6. 在从服务器上编辑MySQL配置文件(my.cnf),启用复制功能。在配置文件中添加以下内容: ``` [mysqld] server-id=2 ``` `server-id`参数指定从服务器的唯一ID,与主服务器不同即可。 7. 重启从服务器使配置生效。 8. 在从服务器上执行以下命令,配置从服务器连接到主服务器并开始复制: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master_log_file', MASTER_LOG_POS=master_log_pos; ``` `master_ip`是主服务器的IP地址,`replication_user`和`password`是之前创建的复制用户的用户名和密码,`master_log_file`和`master_log_pos`是之前在主服务器上获取的二进制日志文件和位置信息。 9. 启动从服务器上的复制进程: ``` START SLAVE; ``` 10. 在从服务器上执行以下命令,检查复制状态: ``` SHOW SLAVE STATUS\G ``` 如果输出结果中的`Slave_IO_Running`和`Slave_SQL_Running`都为`Yes`,表示主从复制已成功搭建。 这只是一个简单的MySQL主从搭建步骤,实际环境中可能还需要考虑更多因素,如网络配置、防火墙设置等。具体操作还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值