mysql主从复制部署

目录

1. 准备LInux虚拟机 ip地址为:

2. 分别安装mysql

3. 配置主从同步

3.1 主数据库配置

3.1.1 修改配置文件

3.1.2 启动、停止mysql服务

3.1.3 创建连接用户

3.2 从数据库配置

3.2.1 修改配置文件

3.2.2 启动、停止mysql服务

3.2.3 登录mysql

3.2.4 测试

4. 主从同步失效解决

4.1 查看主从是否同步

4.2 解决方法

4.2.1 忽略错误后,继续同步

4.2.2 重新做主从,完全同步


1. 准备LInux虚拟机 ip地址为:

主ip192.168.3.226
从ip192.168.3.227

2. 分别安装mysql

参考:Linux部署Mysql8.0_率小气的博客-CSDN博客

3. 配置主从同步

3.1 主数据库配置

3.1.1 修改配置文件

vim /etc/my.cnf
[mysqld]
#数据库id,为1表示为master,其中master_id必须为1-232之间的一个正整数
server-id=1

#启动二进制日志
log-bin=mysql-bin
log-bin-index=master-bin.index

#需要同步的二进制数据库名
binlog-do-db=minishop

#不同步的二进制数据库名,如果不设置可以将其注释;
binlog-ignore-db=information_schema  
binlog-ignore-db=mysql  
binlog-ignore-db=personalsite  
binlog-ignore-db=test

#把更新的记录写到二进制文件中
log-slave-updates

3.1.2 启动、停止mysql服务

停止mysql服务:service mysqld stop

启动mysql服务:service mysqsld start

3.1.3 创建连接用户

登录mysql

创建一个用于让从数据库连接的用户:

mysql> CREATE USER 'slave'@'192.168.3.227' IDENTIFIED WITH mysql_native_password BY '123456';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.13.227';

mysql>plush privileges;

获取主节点当前binarylog文件名和位置(position)

mysql> show master status;

3.2 从数据库配置

3.2.1 修改配置文件

vim /etc/my.conf

[mysqld]

#设置server_id,注意要唯一
server-id = 2

#开启binlog,以备slave作为其他slave的master时使用
log-bin=mysql-bin

#relay_log配置中继日志
relay-log=edu-mysql-relay-bin

relay-log-index=relay-log.index

#如果需要同步函数或者存储过程
log_bin_trust_function_creators=true

log-slave-update

#如果主从库名相同,从库配置使用
replicate-do-db=kintech_pd

#如果库名不同,从库配置使用
replicate-rewrite-db = kintech_pd(主库) -> kps_common(丛库)

3.2.2 启动、停止mysql服务

停止mysql服务:service mysqld stop

启动mysql服务:service mysqsld start

3.2.3 登录mysql

执行同步命令:

mysql> stop slave;

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.3.226',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=844;

mysql> start slave;

mysql> show slave status\G;

Slave_IO_Running和Slave_SQL_Running的状态都为YES才表示同步成功!!!!

注:一般io的报错,都是server_id重复了

查看server_id的方法

show variables like 'server_id';

若有错误,可在下方查看报错信息:

至此,主从同步完成。可自行测试同步效果。

3.2.4 测试

创建数据库:
mysql> create database test;

使用数据库:
mysql> use test;

设置编码:
mysql> set names utf8;

导入数据:
mysql> source /home/data/test.sql;

确定数据表是否创建成功,即数据文件是否导入成功。

执行命令 :
mysql> show tables;

查看主从数据库下的表,是否一致。

4. 主从同步失效解决

4.1 查看主从是否同步

先查看master库

查看进程是否sleep太多

mysql> show processlist;

mysql> show master status;

+-------------------+----------+--------------+-------------------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+-------------------------------+

| mysqld-bin.000002 | 3260 | | mysql,test,information_schema |

+-------------------+----------+--------------+-------------------------------+

1 row in set (0.00 sec)

显示正常!

再查看slave从库

mysql> show slave status\G;

Slave_IO_Running: Yes
Slave_SQL_Running: No

可见是slave不同步。

4.2 解决方法

4.2.1 忽略错误后,继续同步

该方法适用于主从库数据相差不大的情况,或者要求数据可以不完全统一的情况,数据要求不严格的情况

mysql> stop slave;

CHANGE MASTER TO
MASTER_HOST='192.168.3.266',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=3260;
set global sql_slave_skip_counter =1;

start slave;

show slave status\G;

查看信息:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

OK,现在主从同步状态正常了!!!

4.2.2 重新做主从,完全同步

该方法适用于主从数据相差较大,或者要求数据完全统一的情况

解决步骤如下:

  • 首先进入主库,进行锁表,防止数据写入,使用命令:

        mysql> flush tables with read lock;

        注意:该处是锁定为只读状态,数据不区分大小写

  •  进行数据备份

        把数据备份到mysql.bak.sql文件

        命令:mysqldump -uroot -p密码 -hlocalhost > mysql.bak.sql

        注意:数据库备份一定要定期进行,可以使用shell脚本或者python脚本,确保数据万无一失。

  • 查看master状态

       mysql> show master status;

+-------------------+----------+--------------+-------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+-------------------------------+
| mysqld-bin.000003 | 4863 | | mysql,test,information_schema |
+-------------------+----------+--------------+-------------------------------+
1 row in set (0.00 sec)
  • 把mysql备份文件复制到从数据库机器,进行数据恢复

        使用命令:scp mysql.bak.sql root@192.168.3.227:/tmp/

  • 停止从库状态 mysql> stop slave;
  • 然后登录从库数据库执行mysql命令,导入备份数据

        mysql> source /tmp/mysql.bak.sql

  • 根据上面主从步骤重新同步
  • 最后执行解锁,命令:unlock tables

以上基本可以解决主从问题,如有问题,大家可相互讨论,论证!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值