mysql主从搭建

本文详细介绍了MySQL主从搭建的步骤,包括mysqld.cnf配置文件区分master和slave,如设置server-id、binlog名字、格式等,还涉及自增主键值、同步库表等设置。接着阐述了两台互为主从的搭建过程,最后给出常见故障如Slave_IO_Running和Slave_SQL_Running为No的恢复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql主从搭建

20201213

17:06

搭建:

 

1、mysqld.cnf 配置文件区分master和slave

 

mysql服务器唯一标识设置:

server-id=1 

作用:

server-id用于标识数据库实例,防止在链式主从、多主多从拓扑中导致SQL语句的无限循环:

 

    • (1)标记binlog event的源实例
    • (2)过滤主库binlog,当发现server-id相同时,跳过该event执行,避免无限循环执行。
    • (3)如果设置了replicate-same-server-id=1,则执行所有event,但有可能导致无限循环执行SQL语句。

 

https://segmentfault.com/a/1190000020315036?utm_source=tag-newest

 

取值范围:1到232–1之间的一个正整数值

Server-id相同时报错:

 

binglog的名字设置:

log-bin=mysql-bin

 

存放位置:/var/lib/mysql  宿主机上在:/opt/center/data/mysql1/

 

mysql查看binlog

 

1sql命令行

mysql> show binlog events;   #只查看第一个binlog文件的内容

mysql> show binlog events in 'mysql-bin.000002';#查看指定binlog文件的内容

mysql> show binary logs;  #获取binlog文件列表

mysql> show master status #查看当前正在写入的binlog文件

 

https://dev.mysql.com/doc/refman/5.7/en/binary-log.html

 

 

2mysqlbinlog插件:

 

binlog格式设置:

binlog_format=ROW

 

    • ① STATEMENT模式(SBR)
    • 每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
    • ② ROW模式(RBR)
    • 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志:比如update语句执行之后,日志中记录的不是这条 update 语句所对应的事件,而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log 日志的量就会很大。尤其是当执行 alter table 之类的语句的时候,产生的日志量是惊人的。
    • ③ MIXED模式(MBR)
    • 以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

 

来自 <https://www.cnblogs.com/xingyunfashi/p/8431780.html>

 

警惕:mixed模式可能会发生主从不一致的情况,推荐使用row模式!

 

自增主键值设置

auto-increment-increment=2

auto-increment-offset=2

 

    • auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
    • auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535

 

 

同步库表设置

binlog-do-db=center  #只同步center库

replicate-wild-ignore-table=center.flyway_schema_history  #忽略的表

 

忽略同步异常

slave-skip-errors = 1032,1062

1062:错误是指一些主键重复的错误

1032错误是更新/删除数据时找不到行

 

2、主从搭建(两台互为主从):

 

1我们需要授权root用户的replication及slave权限。如果不授权的话,从库是不能连接主库的。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'%';

 

2)看一下master的日志文件及位置。我们看到了master机器的文件名及其位置。

 

3我们在从库里边执行如下命令。里边配置设置了master的主机名,主机端口号,主机用户名,密码,主机器的文件名字以及位置。

change master to master_host='mysql_master',master_port=3306, master_user='root',master_password='root',master_log_file='mysql-bin.000005',master_log_pos=154;

 

4)接下来我们来启动slave,并且查看slave的线程命令。

 

start slave;

show slave status \G;

 

Slave_IO_Running   : io_thread 负责与主库建立连接

 

Slave_SQL_Running : sql_thread 读取同步过来的日志,解析出日志里的命令,并执行

 

 Seconds_Behind_Master:   主备延迟时间

 

https://www.docs4dev.com/docs/zh/mysql/5.7/reference/show-slave-status.html

 

 

3、常见故障恢复:

 

Slave_IO_Running NOSlave_SQL_Running为No

1)重启mysql服务

2)重启slave服务,跳过一次事务

docker exec -i center-mysql mysql -uroot -p1q2w3e@4R -e "STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;START SLAVE;"

3)重新建立主从关系

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主从搭建步骤,实际环境中可能还需要考虑更多因素,如网络配置、防火墙设置等。具体操作还需要根据实际情况进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值