【精】Linux上面Mysql主从复制配置

本文详细介绍了如何在Linux环境下配置MySQL主从复制,包括主从服务器的基本配置、权限设置、数据同步以及处理同步过程中可能出现的问题。通过主从复制实现数据库读写分离,确保数据一致性和高可用性。同时,文中列举了如权限错误、锁文件问题、同步失败等常见问题及其解决方案。

Mysql主从复制

Linux下面安装主从复制

参考: https://blog.youkuaiyun.com/wangxy_job/article/details/106313553

数据库读写分离架构

读写分离架构
在这里插入图片描述

数据库主从复制原理

在这里插入图片描述

主从复制主要是从服务器监控主服务器的binlog,发现有add/update/delete等进行自我更新

  • 主服务器开启binlog
    记录增删改操作
  • 从监控主binlog日志变化
    更新自己的数据

主从配置

1.创建两个mysql数据库服务,启动两个Mysql服务

购买两份百度云服务器
host1 : 106.12.57.160(主)
host2 : 106.12.11.171(从)

分别安装mysql服务

2.主从服务器基本配置

(1)主服务器配置

    [mysqld]
    #设置服务id,主从不能一样
    server-id=1
    #开启binlog日志
    log-bin=/opt/logs/mysql/binlogs/mysql-bin
    #记录日志模式
    binlog_format=mixed
    #设置binlog过期清理时间
    expire_logs_days=7
    #设置不需要同步的数据库
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    #设置需要同步的数据库
    binlog-do-db=web_book

(2)从服务器配置

    [mysqld]
    #设置服务id
    server-id=2
    #开启binlog日志
    log-bin=/opt/logs/mysql/binlogs/mysql-bin
    #记录日志模式
    binlog_format=mixed
    #设置不需要同步的数据库
    replicate_wild_ignore_table=mysql.%
    replicate_wild_ignore_table=information_schema.%
    replicate_wild_ignore_table=performance_schema.%
    #设置需要同步的数据库    
    replicate_wild_do_table=web_book.%

3.自定义binlog添加权限

#如果自定义binlog目录需要指定权限
chown -R mysql:mysql /opt/logs/mysql/binlogs

#重启mysql
systemctl restart mysqld          

4.查询验证

#查询是否配置成功
show master status;

#查询server_id
show variables like '%server_id%';

#查询日志记录使用的模式
show global variables like "%binlog_format%";

5.创建主从复制账号

#登录主库
mysql -uroot -p

#创建主从复制专用账号
grant replication slave on *.* to 'db_sync'@'%' identified by 'db_sync_123';            

#刷新权限
flush privileges;

6.主从数据同步配置

切换到从库

#先停止同步
stop slave;

#修改从库指向主库,使用主库记录的binlog日志名mysql-bin.000001
change master to
master_host='106.12.57.160',
master_user='db_sync',
master_password='db_sync_123',
master_log_file='mysql-bin.000001',
master_log_pos=592

#启动同步
start slave;

7.查看主从库状态

#查询主库状态(切换主库)
show master status;
#查询从库状态(切换从库)
show slave status\G;

主库状态:

从库状态:

在这里插入图片描述

注意:当Slave_IO_Running和Slave_SQL_Running都为Yes说明同步成功

FAQ

1.重启mysql报错?
执行:systemctl restart mysqld.service

报错:mysqld: File '/opt/logs/mysql-bin.index' not found (Errcode: 13 - Permission denied)

问题解析:

由于yum安装权限属于mysql用户

解决:chown -R mysql:mysql /opt/logs/mysql-bin
2.Check that you do not already have another mysqld process using the same Inn
原因:存在多个运行的mysql进程

解决:ps -ef|grep mysql
     kill -9 pid
3.Could not open unix socket lock file /var/lib/mysql/mysql.sock.lock.
原因:/var/lib/mysql存在锁文件

解决:cd /var/lib/mysql
     rm -f mysql.sock.lock 
4.Your password does not satisfy the current policy requirements.
原因:设置主从复制账号的时候密码太弱

解决:修改密码强弱规定
     set global validate_password_policy=LOW;         
     set global validate_password_length=11;
5.如果之前已经有从库指向主库的,需要先清除
stop slave io_thread for channel '';
reset slave all;         
6.从库同步失败:Slave_SQL_Running:No
方法一、跳过错误行
    stop slave ;
    set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    start slave ;

方法二、手动同步数据

    先把数据手动同步

    #进入master
    
    show master status;
    记录下position = [newPosition]
    
    #进入slave
    stop slave;
    change master to...master_log_pos=[newPosition]
    start slave;
7.从库同步失败?
#replicate-ignore-db = test
#replicate-do-db = abc
以上方式会出现问题,建议使用replicate_wild_*来设置同步
微信小程序提供了日期时间选择器组件`picker`和日历组件`calendar`,但如果需要自定义样式或者功能,可以考虑封装一个日期时间组件。 以下是一个简单的日期时间组件的封装示例: 1. 在`/components`目录下创建一个`datetime-picker`文件夹,创建`datetime-picker.wxml`、`datetime-picker.wxss`、`datetime-picker.js`和`datetime-picker.json`四个文件。 2. 在`datetime-picker.json`中定义组件的属性: ```json { "component": true, "usingComponents": {}, "properties": { "startDate": { "type": String, "value": "2023-02-15", }, "endDate": { "type": String, "value": "2023-02-20", }, "startTime": { "type": String, "value": "00:00", }, "endTime": { "type": String, "value": "23:59", }, "defaultDate": { "type": String, "value": "", }, "defaultTime": { "type": String, "value": "", }, "format": { "type": String, "value": "datetime", }, "showTime": { "type": Boolean, "value": true, }, "showDate": { "type": Boolean, "value": true, }, "startPlaceholder": { "type": String, "value": "开始时间", }, "endPlaceholder": { "type": String, "value": "结束时间", }, "bind:change": { "type": Function, "value": "", } }, "options": { "styleIsolation": "apply-shared" } } ``` 上述属性中: - `startDate`和`endDate`为日期范围,用于限制可选日期的范围; - `startTime`和`endTime`为时间范围,用于限制可选时间的范围; - `defaultDate`和`defaultTime`为默认值; - `format`为显示格式,支持`datetime`、`date`和`time`三种格式; - `showTime`和`showDate`分别控制是否显示时间和日期选择器; - `startPlaceholder`和`endPlaceholder`为开始时间和结束时间的占位符; - `bind:change`为选择器值变化时的回调函数。 3. 在`datetime-picker.wxml`中定义选择器组件: ```html <view class="datetime-picker"> <view wx:if="{{showDate}}" class="datetime-picker-item"> <picker mode="date" start="{{startDate}}" end="{{endDate}}" value="{{selectedDate}}" bindchange="onDateChange"> <view class="datetime-picker-value"> <text wx:if="{{selectedDate}}">{{selectedDate}}</text> <text wx:else>{{startPlaceholder}}</text> </view> </picker> </view> <view wx:if="{{showTime}}" class="datetime-picker-item"> <picker mode="time" start="{{startTime}}" end="{{endTime}}" value="{{selectedTime}}" bindchange="onTimeChange"> <view class="datetime-picker-value"> <text wx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花生糖葫芦侠

创作不易,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值