mysql主从架构搭建_技术 | 手把手教你搭建MySQL主从架构

1

什么是MySQL的复制

MySQL的主从复制可以实现将数据从一台数据库服务器(master)复制到一台或多台数据库服务器(slave)上,进而可以保证数据有多份冗余。

默认情况下,属于异步复制,所以无需维持长连接。

2

MySQL复制的原理

99ead72a2d4ba31f095ead626d2cefe8.png

·slave端的IO线程发送请求给master端的binlog dump线程

·master端binlog dump线程获取二进制日志信息(文件名和位置信息)发送给slave端的IO线程

· salve端IO线程获取到的内容依次写到slave端relay log里,并把master端的bin-log文件名和位置记录到master.info里

·salve端的SQL线程,检测到relay log中内容更新,就会解析relay log里更新的内容,并执行这些操作,从而达到和master数据一致

3

MySQL复制搭建

⒈环境说明

当前环境中只有一台MySQL数据库服务器,上面已有相关业务数据。现需要在此基础上构建MySQL的主从复制架构。

·系统环境说明

IP

主机名

角色

系统版本

MySQL版本

10.1.1.10

master.MissHou.cc

主(master)

Centos 7.5

MySQL-5.6.35

10.1.1.20

slave.MissHou.cc

从(slave)

Centos 7.5

MySQL-5.6.35

·数据库安装环境说明

角色

安装目录

数据目录

端口

Master

/usr/local/mysql/

/usr/local/mysql/data

3307

Slave

/usr/local/mysql/

/usr/local/mysql/data

3307

⒉从服务器安装MySQL数据库

[root@slave ~]# id mysql

id: mysql: no such user

[root@slave ~]# useradd -r -s /sbin/nologin mysql

[root@slave ~]# mkdir /usr/local/mysql

[root@slave ~]# cd /usr/src/

[root@slave src]# ls

debug  kernels  mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

[root@slave src]# tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

[root@slave src]# ls

debug  kernels  mysql-5.6.35-linux-glibc2.5-x86_64  mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

[root@slave src]# cp -a mysql-5.6.35-linux-glibc2.5-x86_64/* /usr/local/mysql/

[root@slave src]# chown -R mysql. /usr/local/mysql/

[root@slave src]# cp support-files/mysql.server /etc/init.d/mysql

注意:

暂时不需要初始化数据库文件,只是安装好了和master相同版本的mysql数据库软件;后面向master来同步所有数据。

⒊修改主和从的配置文件

注意:

·server-id必须不能一致;

·master需要开启二进制日志

·slave需要开启中继日志

[root@master ~]# cat /etc/my.cnf

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

port=3307

socket=/usr/local/mysql/mysql.sock

log-error=/usr/local/mysql/data/db01_3307.err

character_set_server=utf8mb4

log-bin=/usr/local/mysql/data/binlog

server-id = 10

[root@slave ~]# cat /etc/my.cnf

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/usr/local/mysql/mysql.sock

log-error=/usr/local/mysql/data/db02_3307.err

character_set_server=utf8mb4

server-id=20

relay-log=/usr/local/mysql/data/relaylog

⒋主从两边初始数据保持一致

·主服务器停止MySQL服务

[root@master ~]# mysqladmin shutdown -p123

·主服务器删除auto.cnf文件

[root@master ~]# cd /usr/local/mysql/data/

[root@master data]# rm -f auto.cnf

说明:auto.cnf文件里保存的是每个数据库实例的UUID信息,代表数据库的唯一标识

· Master上数据同步到slave

[root@master ~]# rsync -av /usr/local/mysql/data/ 10.1.1.20:/usr/local/mysql/data

·启动Master和Slave数据库

[root@master ~]# service mysql start

[root@slave ~]# service mysql start

⒌主服务器创建复制用户

mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';

mysql> flush privileges;

先加锁,防止两边数据不一致

mysql> flush tables with read lock;

查看当前数据库的二进制日志写到什么位置(只有打开二进制日志,这句命令才有结果)

mysql> show master status;

⒍从服务器配置同步信息

mysql> change master to master_host='10.1.1.10',master_user='slave',master_password='123',master_port=3307,master_log_file='mybinlog.000002',master_log_pos=405;

⒎从服务器启动复制线程

mysql> start slave;

mysql> show slave status\G

.....

Slave_IO_Running: Yes    代表成功连接到master并且下载日志

Slave_SQL_Running: Yes   代表成功执行日志中的SQL语句

⒏主服务器解锁

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

4

主从测试验证

⒈主服务器上插入数据

mysql> select * from db02.t1;

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

| id   | name  |

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

|    1 | mona  |

|    2 | harry |

|    3 | jack  |

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

3 rows in set (0.00 sec)

mysql> insert into t1 values(4,'tom');

Query OK, 1 row affected (0.00 sec)

mysql> select * from db02.t1;

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

| id   | name  |

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

|    1 | mona  |

|    2 | harry |

|    3 | jack  |

|    4 | tom   |

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

⒉从服务器查看数据

mysql> select * from db02.t1;

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

| id   | name  |

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

|    1 | mona  |

|    2 | harry |

|    3 | jack  |

|    4 | tom   |

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

5

MySQL主从复制总结

·主从复制必须保证两台数据库实例的server-id不一致

·主服务器必须开启二进制日志;从服务器必须开启中继日志

·主从复制搭建必须保证初始数据一致

·主服务器必须要给从服务器创建一个复制用户,并授予复制权限

·Master—>Slave架构,主写会同步到从;而从写不会同步到主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是一种高可用性和可扩展性的解决方案,可以提高数据库系统的性能和可靠性。 以下是MySQL主从架构搭建的步骤: 1. 配置主服务器:在主服务器上,编辑MySQL配置文件,使其开启二进制日志功能。在my.cnf配置文件中添加以下内容: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 其中,log-bin参数表示开启二进制日志功能,server-id参数表示服务器的唯一ID号,一般设置为1。 2. 创建从服务器账户:在主服务器上,创建一个用于从服务器连接主服务器的账户,并授予REPLICATION SLAVE权限。可以使用以下命令创建账户: ``` CREATE USER 'slave'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; ``` 其中,'slave'@'%'表示从服务器的IP地址,'password'是账户的密码。 3. 导出主服务器数据:在主服务器上,使用mysqldump命令导出数据库的数据,并将数据保存到一个.sql文件中。可以使用以下命令: ``` mysqldump -u root -p --all-databases --master-data > db.sql ``` 其中,--master-data参数会在导出的SQL语句中加入CHANGE MASTER TO语句。 4. 导入数据到从服务器:将导出的SQL文件拷贝到从服务器上,并使用以下命令导入数据: ``` mysql -u root -p < db.sql ``` 5. 配置从服务器:在从服务器上,编辑MySQL配置文件,设置server-id参数为一个唯一的ID号。可以使用以下命令: ``` [mysqld] server-id=2 ``` 6. 启动从服务器:在从服务器上启动MySQL服务,并使用以下命令连接到主服务器: ``` CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='slave', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; ``` 其中,MASTER_HOST参数是主服务器的IP地址,MASTER_USER和MASTER_PASSWORD参数是之前创建的账户和密码,MASTER_LOG_FILE和MASTER_LOG_POS参数是在导出数据时自动生成的,可以在导出的SQL文件中找到。 7. 启动主从复制:在从服务器上,使用以下命令启动主从复制: ``` START SLAVE; ``` 至此,MySQL主从架构搭建完成了。从服务器会自动从主服务器同步数据,并且可以实现读写分离、负载均衡等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值