Step by step——MacOs下源码编译Mysql5.7数据库以及进行主从部署

1. 前言

网络上关于在Linux系统下Mysql源码编译的文章有很多,但是在MacOs下编译的文档却很少。故而整理一份在MacOs(M2芯片)下Mysql5.7源码编译文档供大家借鉴参考。

2. Mysql相关依赖

相关依赖版本
openssl1.1
boost1.59

2.1 openssl安装

在mysql5.7中,openssl的依赖版本为1.1,执行以下命令进行安装

brew install openssl@1.1

重要: 安装成功后需要记住红框中的opensll的安装路径,后续在编译mysql时会用到,如下图中安装路径为: /opt/homebrew/opt/openssl@1.1/
在这里插入图片描述

2.2 下载boost1.59源码包

  • 点击下载地址, 选择boost_1_59_0.tar.gz进行下载

  • 拷贝到一个文件夹中进行解压,得到boost_1_59_0文件夹

cp boost_1_59_0.tar.gz ${指定的Boost文件解压目录}
tar -zxvf boost_1_59_0.tar.gz

注意: 无需进入解压后的文件夹中进行安装操作,Mysql在编译时会同步编译boost,我们只需要在CMake中添加WITH_BOOST的编译选项来指定解压后的boost文件夹即可

3 编译Mysql5.7

3.1 拉取源码

git clone https://github.com/mysql/mysql-server.git -b 5.7

如果拉取速度较慢,则可以在国内网站Gitee中进行拉取。

3.2 CMake编译

执行以下命令进行编译,其中Boost文件解压目录具体参考2.2小节,openssl安装的目录具体参考2.1小节

cd mysql-server
mkdir bld && cd bld
sudo cmake ..  -DWITH_BOOST=${Boost文件解压目录} -DWITH_SSL=${openssl安装的目录}

CMake执行成功后,执行如下命令等待安装完成即可:

sudo make -j8 
sudo make install

ps: 这里由于没有指定prefix安装路径,所以mysql将会安装在**/usr/local/**目录下

4 主备部署

我们先部署一个端口为3307的主库,同时部署一个端口为3308的从库,下列配置中4.1-4.5是主库和从库都需要进行的步骤。

4.1 创建配置目录

在这里插入图片描述
在表示主库的3307目录下创建了data, logs, mycnf, socket四个目录,这些目录的作用为:

  • data目录:存放数据库文件,即我们常说的 MySQL data 文件。
  • logs目录:存放数据库的日志文件,比如记录数据库异常信息的log_error日志等。
  • mycnf目录:用于存放3307主库启动时以来的配置文件。
  • socket目录:用于存放客户端和服务端通信的socket文件,mysql没有启动时该文件会为空。

4.2 填写配置文件

这里新建一个my.cnf的文件,并简单填写了相关配置项:

[mysqld]
# 端口号,若是从库则修改为3308
port=3307
# mysql服务的标识id
server-id=1
# mysql data文件存放目录
datadir=/Users/xxxx/multiserver/3307/data
# error日志存放目录
log_error=/Users/xxxx/multiserver/3307/logs/error.log
# mysql的安装路径
basedir=/usr/local/mysql
# 服务启动后,socket文件存放目录
socket=/Users/xxxx/multiserver/3307/socket/mysql.sock
# 表示开启binlog日志,并表明binlog日志的基本文件名
log-bin=/Users/xxxx/multiserver/3307/logs/mysql-bin
# 设置binlog日志三种格式:STATEMENT、ROW、MIXED. 详细区别可自行google
binlog_format=mixed

4.3 初始化mysql

mysql服务启动前需要进行初始化,其中–basedir参数表示mysql的安装路径, --datadir表示数据库data文件存放之处

mysqld --initialize  --user=mysql --basedir=/usr/local/mysql --datadir=/Users/xxxx/mutilserver/3307/data

注意:命令执行完后将会生成root账户的密码(用于客户端连接mysql),会在命令行中以下列信息告知,注意保存密码 bkdashkj=da:

[Note] A temporary password is generated for root@localhost: bkdashkj=da

4.4 启动mysql服务端

./mysqld --defaults-file=/Users/xxxx/multiserver/3307/mycnf/my.cnf --user=mysql

可通过以下命令查看服务是否启动:

lsof -i:3307

4.5 连接mysql

连接到mysql并且输入初始密码验证

./mysql -uroot -P3307 -S /Users/xxxx/multiserver/3307/socket/mysql.sock -p

修改初始密码

alter user 'root'@'localhost' identified by 'yourpassword';

ps: 4.1-4.5是主库和从库都需要进行的步骤

4.6 主库配置

账号为slave,密码为1234

grant replication slave on *.* to 'slave'@'%' identified by '1234';

查看主库状态,并记录从库与主库建连时会用到的File和Position的值:

show master status

在这里插入图片描述
ps: 主库到此配置完成

4.7 从库配置

按照4.1-4.5的步骤执行后(配置需要对应修改,如port以及各个目录路径),执行命令登陆从库

./mysql -uroot -P3308 -S /Users/xxxx/multiserver/3308/socket/mysql.sock -p

创建从库与主库的联系,其中master_log_file和master_log_pos需要与主库对齐:

change master to master_host='127.0.0.1',master_user='slave',master_password='1234',master_port=3307,master_log_file='mysql-bin.000001',master_log_pos=154;

启动从库

start slave;

查看从库状态, Slave_IO_Running和Slave_SQL_Running为YES则表示成功

show slave status\G;

在这里插入图片描述

5. 验证主从功能

5.1 创建简单表

在主库中创建一个数据库,并在其中创建一个简单表

CREATE DATABASE test;
CREATE TABLE name_info(
    id int not null,
    name char(12)
);

5.2 查看从库是否同步更新

use test;
show tables;

在这里插入图片描述
从库中确实生成了名为name_info的库。

FAQ

Q1: 安装报错: You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=directory

如果按照文章步骤执行后报错,请检查一下执行如下命令时DWITH_BOOST的路径是否是boost解压后的路径

sudo cmake ..  -DWITH_BOOST=${Boost文件解压目录} -DWITH_SSL=${openssl安装的目录}

Q2: 安装报错: Please install the appropriate openssl developer package.

如果按照文章步骤执行后报错,请检查一下执行如下命令时DWITH_SSL的路径下是否存在如下文件:
在这里插入图片描述

Q3: 启动主库失败,报错: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist

这是没有初始化mysql导致的,需要执行4.3的命令来初始化mysql,再启动mysql服务端。

Q4: start slave后发现Slave_IO_Running状态为: Connecting

这可能是连接主库时slave账户密码填错导致,又或者没有在主库中创建用于备份的账号。从库中执行以下命令重新填写:

stop slave;
change master to master_host='127.0.0.1',master_user='slave',master_password='1234',master_port=3307,master_log_file='mysql-bin.000001',master_log_pos=154;
start slave;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值