MYSQL主从架构

root@mysql \~# sed -i 'aexport PATH=/usr/local/mysql/bin/:PATH' /etc/profile //添加到环境变量

root@mysql \~# source /etc/profile //使配置环境生效

配置开机自启

root@mysql \~# chkconfig --list //列举

注:该输出结果只显示 SysV 服务,并不包含

原生 systemd 服务。SysV 配置数据

可能被原生 systemd 配置覆盖。

要列出 systemd 服务,请执行 'systemctl list-unit-files'。

查看在具体 target 启用的服务请执行

'systemctl list-dependencies target'。

netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关

network 0:关 1:关 2:开 3:开 4:开 5:开 6:关

root@mysql \~# chkconfig --add mysql8

root@mysql \~# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含

原生 systemd 服务。SysV 配置数据

可能被原生 systemd 配置覆盖。

要列出 systemd 服务,请执行 'systemctl list-unit-files'。

查看在具体 target 启用的服务请执行

'systemctl list-dependencies target'。

mysql8 0:关 1:关 2:开 3:开 4:开 5:开 6:关

netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关

network 0:关 1:关 2:开 3:开 4:开 5:开 6:关

//启动2345

root@mysql \~# chkconfig mysql8 on

root@mysql \~# vim /usr/local/mysql/my.cnf //配置文件

mysqld

basedir=/usr/local/mysql // 这是 MySQL 安装目录的路径。所有与 MySQL 相关的基础文件(例如二进制文件和库文件)都位于此目录下。

datadir=/usr/local/mysql/data // 这是 MySQL 数据目录的路径。所有数据库文件(包括数据、索引等)都存储在这个目录中。

socket=/tmp/mysql.sock //指定用于 MySQL 进程间通信的 UNIX 套接字文件的位置。这个文件允许客户端和服务器之间通过 UNIX socket 进行连接。

activate_all_roles_on_login=on //这项配置表示在用户登录 MySQL 时,系统会自动激活与该用户关联的所有角色。如果设定为 off,则只有用户明确请求的角色(s)会被激活。

root@mysql \~# service mysql8 restart //重启

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

root@mysql \~# ll /tmp //查看套字节文件

总用量 8

srwxrwxrwx. 1 mysql mysql 0 8月 6 10:10 mysql.sock

-rw-------. 1 mysql mysql 5 8月 6 10:10 mysql.sock.lock

srwxrwxrwx. 1 mysql mysql 0 8月 6 10:10 mysqlx.sock

-rw-------. 1 mysql mysql 5 8月 6 10:10 mysqlx.sock.lock

主从mysql

一、环境准备

两台mysql服务器

主(192.168.1.129) 从(192.168.1.20)有yum本地源,阿里云镜像

主从:

root@zmysql \~# systemctl stop firewalld

root@zmysql \~# systemctl disable firewalld

root@zmysql \~# vim /etc/selinux/config

SELINUX=disabled

二、配置时间同步

root@zmysql \~# yum -y install ntpdate.x86_64

root@zmysql \~# ntpdate cn.ntp.org.cn

root@zmysql \~# yum -y install rsync

三、使用脚本部署安装

主:

root@localhost \~# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar

root@localhost \~# vim mysql.sh //编写安装脚本

#!/bin/bash

yum list installed |grep libaio

if $? ne 0 ; then

yum -y install libaio

fi

echo libaio yes

rm -rf /etc/my.cnf

echo remo my.cnf yes

tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

echo tar zx yes

cp -r ~/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql

echo copy file to /usr/local/mysql yes

mkdir /usr/local/mysql/mysql-files

echo mysql-files yes

grep mysql /etc/passwd

useradd -r -s /sbin/nologin mysql

chown mysql:mysql /usr/local/mysql/mysql-files

chmod 750 /usr/local/mysql/mysql-files

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/

/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8

sed -i 'aexport PATH=/usr/local/mysql/bin:PATH' /etc/profile

source /etc/profile

root@localhost \~# source mysql.sh //运行脚本

root@zmysql \~# vim /usr/local/mysql/my.cnf //编写配置文件

mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3306

log-error=/usr/local/mysql/data/db01-master.err

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

server-id=10

character_set_server=utf8mb4

root@zmysql \~# service mysql8 restart //重启服务

Shutting down MySQL. SUCCESS!

Starting MySQL. SUCCESS!

从:

root@localhost \~# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar

root@localhost \~# vim mysql.sh //编写脚本,注释掉其中两行

#!/bin/bash

yum list installed |grep libaio

if $? ne 0 ; then

yum -y install libaio

fi

echo libaio yes

rm -rf /etc/my.cnf

echo remo my.cnf yes

tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

echo tar zx yes

cp -r ~/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql

echo copy file to /usr/local/mysql yes

mkdir /usr/local/mysql/mysql-files

echo mysql-files yes

grep mysql /etc/passwd

useradd -r -s /sbin/nologin mysql

chown mysql:mysql /usr/local/mysql/mysql-files

chmod 750 /usr/local/mysql/mysql-files

#/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/

#/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8

sed -i 'aexport PATH=/usr/local/mysql/bin:PATH' /etc/profile

source /etc/profile

root@localhost \~# source mysql.sh //运行脚本

root@localhost \~# vim /usr/local/mysql/my.cnf //编写配置文件

mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3310

log-error=/usr/local/mysql/data/db01-slave.err

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

server-id=11

character_set_server=utf8mb4

四、数据同步

回到主服务器:

root@zmysql \~# service mysql8 stop //停止服务

root@zmysql \~# rm -rf /usr/local/mysql/data/auto.cnf //这个操作保证两个mysql服务是一起的,因为这个文件存放的是mysql服务器的uuid,uuid保证了mysql服务器的唯一性,所以删除以后,两个服务器就可以做主从

root@zmysql \~# rsync -av /usr/local/mysql/data root@192.168.1.20:/usr/local/mysql/ //同步过去

root@zmysql \~# service mysql8 start //启动服务

回到从服务器

root@localhost \~# service mysql8 start

root@localhost \~# mysql -P3310 -p1812354953Gf. //使用主服务器账号密码可以登陆,默认就是用root登陆

mysql> exit

Bye

五、主从复制实现

1、主服务器创建授权账号

root@zmysql \~# mysql -p1812354953Gf.

mysql> create user 'gao'@'%' identified by 'abc_123';

Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'gao'@'%';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'server_id';

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

| Variable_name | Value |

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

| server_id | 10 |

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

1 row in set (0.00 sec)

2、在主服务器中锁表

mysql> flush tables with read lock; //锁定表

Query OK, 0 rows affected (0.00 sec)

mysql> show master status; //查看二进制文件和位置

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| binlog.000008 | 846 | | | |

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

1 row in set (0.00 sec)

3、去从服务器(3.4.5.6.7.8.9都是在从服务器做的),使⽤change master to 指定主服务器,并实现数据同步

root@localhost \~# mysql -P3310 -p1812354953Gf.

mysql> change master to master_host='192.168.1.129', master_user='gao', master_password='abc_123', master_port=3306, master_log_file='binlog.000008', master_log_pos=846;

Query OK, 0 rows affected, 9 warnings (0.00 sec)

4、启动slave数据同步,查看状态

mysql> start slave;

mysql> show slave status \G

这里看到IO状态依旧是connecting,这是因为mysql8.0版本需要ssl非对称加密

mysql> exit

Bye

5、获得远程主服务器的公钥

root@localhost \~# mysql -ugao -pabc_123 -h 192.168.1.129 -P3306 --get-server-public-key

mysql> exit

Bye

6、登陆从服务器本地的数据库

root@localhost \~# mysql -P3310 -p1812354953Gf.

7、停⽤slave服务,重新设置slave服务

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> reset slave;

Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> change master to master_host='192.168.1.129', master_user='gao', master_password='abc_123', master_port=3306, master_log_file='binlog.000008', master_log_pos=846;

Query OK, 0 rows affected, 9 warnings (0.01 sec)

8、启动slave服务

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.02 sec)

9、查看

mysql> show slave status\G

10、去主服务器解锁文件

root@zmysql \~# mysql -uroot -p1812354953Gf.

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

相关推荐
文人sec6 天前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
2501_916008897 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_9160088910 天前
全平台抓包工具,Windows、iPhone、Linux三个平台抓包测试
网络协议·计算机网络·网络安全·ios·adb·https·udp
鸽芷咕12 天前
MySQL Server 鸿蒙 PC 适配全记录:以混合工具链完成 C++23 交叉编译与 HNP 交付
adb·harmonyos·c++23
游戏开发爱好者814 天前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
实心儿儿14 天前
MySQL 的安装
数据库·mysql·adb
2601_9623004715 天前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化
flower_drop16 天前
基于 WebUSB 与 CDP:在浏览器端实现 Android 设备通信与无证书抓包实践
android·chrome·测试工具·adb·bug·edge浏览器
蜡台17 天前
# 已解决|MySQL 8\.4\.11 密码正确仍报错1045 \(28000\) Access denied 终极修复方案
android·mysql·adb
leoZ23117 天前
2026-09-08-mysql-57-init-walkthrough
前端·javascript·数据库·vue.js·opencv·mysql·adb