linux下mysql主从_Linux下mysql主从同步详细配置

Linux下mysql主从同步详细配置

1.环境准备

准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同,因为MySQL不同版本之间的binlog(二进制日志)格式可能会不一样,最后会导致同步出现异常。

介绍先到这里,以下我们先确认两台服务器的信息:

主服务器(master)

IP:10.16.195.49

系统:Linux(redhat centos7 64)

mysql版本:8.0.17

同步数据库:model_slave

同步帐号:model_slave

同步密码:slave123

从服务器(slave)两台

IP:10.16.195.50/10.16.195.51

系统:Linux(redhat centos7 64)

mysql版本:8.0.17

同步数据库:model_slave

2.master服务器配置

1.修改主服务器配置文件

sudo vim /etc/my.cnf

[mysqld]

# 新增如下

server-id=1

log_bin=/data/mysql/mysql-bin.log

expire_logs_days=10

max_binlog_size=100M

binlog_do_db=myslave # 如果需要同时同步多个数据库,请另起一行设置binlog_do_db=需要同步的数据库名称

binlog_ignore_db=mysql # 不想同步的数据库

2.保存退出,重启服务

service mysql restart

如果启动失败,通过查看mysql启动失败的日志,从日志内容寻找解决方案。

cat /data/mysql/mysql.log | tail -30

3.查看并记住master当前二进制名和偏移量。

这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复。

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000002 | 155 | model_slave |mysql |

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

1 row in set (0.00 sec)

4.新建用于查看的mysql帐号

mysql>

create user 'model_slave'@'%' identified by 'slave';

grant replication slave on *.* to 'model_slave'@'%';

3.slave服务器配置

1.修改从服务器配置

sudo vim /etc/my.cnf

[mysqld]

server-id=2

master-host=192.168.8.10

master-user=rep1

master-password=test123456

master-port=3306

replicate-do-db=cmdb

2.重启从服务器

service mysql restart

此时报错:mysqld: unknown variable ‘master-host=

原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',

MASTER_PORT=3306,

MASTER_USER='rep1',

MASTER_PASSWORD='test123456',

MASTER_LOG_FILE='mysql-bin.000002',

MASTER_LOG_POS=155; # 后面两个参数的值与主库保持一致

注意,server-id仍然需要在配置文件中配置,不然会和master一致,无法开启主从。

3.启动slave

mysql> slave start;

Query OK, 0 rows affected (0.04 sec)

4.查看slave的状态

show slave status\G;

如果这两项为yes,则表示成功:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

4f9363676683a59993f701f21dc69f40.png

5.如果有第二台或更多从库,配置操作同样,唯一注意的是配置文件中的server-id需要保持不同。

3.同步主库已有数据到从库

主库操作:

1.停止主库数据更新操作

mysql>flush tables with read lock;

2.新开终端,生成主数据库的备份(导出数据库)

-–master-data:保证在dump时会记录到binlog名称和偏移值

-–lock-all-tables:为了数据在导出的时候没有其它新数据插入,保证一致性

mysqldump –master-data=1 –lock-all-tables=true -uroot -pmysql123 model_slave > /home/model_slave_bak_20200317.sql

3.将备份文件传到从库

scp cmdb.sql gz_admin@10.16.195.50:/home/

4、主库解锁

mysql>unlock tables;

从库操作:

1.停止从库slave

mysql>slave stop;

2.新建数据库model_slave

mysql> create database model_slave charset=utf8;

3、导入数据

[gz_admin@ops-dev ~]$ mysql -uroot -pmysql123 model_slave

mysql> use myslave;

mysql> source /home/model_slave_bak_20200317.sql;

4、查看从库已有该数据库和数据

mysql> show databases;

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

| Database |

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

| information_schema |

| model_slave |

| mysql |

| performance_schema |

| test |

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

4.测试同步

1.在master中插入一条数据

mysql> use model_slave;

mysql> INSERT INTO users(id,name,info) VALUES(1, "jack","handsom");

2.插入成功之后,稍等片刻,就可以在Slave服务器上查看到相同记录.

不成功,仔细再检查一些配置文档。

3.查看当前Slave服务器的同步状态及偏移值等信息

more /var/lib/mysql/master.info

查看Slave执行binlog文件的情况

more /var/lib/mysql/relay-log.info

5.常见问题

1.问题现象

启动slave,查看slave状态,发现报错。

有个错误IO线程在连接中, 还有一个问题就是:

Last_IO_Errno: 2061

Last_IO_Error: error connecting to master 'root@192.168.0.10:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

2.原因

加密方式和解密方式不一致,修改密码加密规则.进入mysql控制台

ALTER USER 'model_slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave123';

FLUSH PRIVILEGES;

3.抛出另一个问题

Last_IO_Errno: 13117

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

4.解决方法:重启mysql服务

service mysql restart

5.进入mysql,重启slave

mysql -u root -p

start slave

show slave status\G;

成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值