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
系统: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)

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

image-20200317204300268

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 [email protected]:/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</home/model_slave_bak_20200317.sql

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

猜你喜欢

转载自www.cnblogs.com/ryxiong-blog/p/12513383.html