当前位置: 首页 > news >正文

Linux源码编译安装MySQL + Qt连接MySQL

一、准备工作

1. 编译环境:

银河麒麟V10 + 飞腾D2000 CPU

2. 下载MySQL源码

        这里编译的是5.7.44版本,带Boost库,这是官网的下载地址:MySQL :: Download MySQL Community Server (Archived Versions)

 3. 解压压缩包

tar -zxvf mysql-boost-5.7.44.tar.gz

4. 安装所依赖的库

1)、安装CMake编译环境,有CMake则不用安装

sudo apt-get install cmake

2)、安装gcc和g++

sudo apt-get install gcc
sudo apt-get install g++

3)、安装其他依赖

// OpenSSL
sudo apt-get install libssl-dev
// Curses
sudo apt-get install libncurses-dev
// PkgConfig
sudo apt-get install pkg-config


二、编译安装

1. cmake预编译

        执行cmake 命令进行预编译,配置安装路径:

sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/MySQL -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/源码路径/boost

DCMAKE_INSTALL_PREFIX 是MySQL想要安装的路径,我这里安装的是

DWITH_BOOST 是下载源码路径下的boost文件夹

2. 进行编译

        编译大概需要半个小时左右

sudo make -j8

3. 安装

sudo make install


三、配置MySQL

1. 编辑配置文件

        配置文件在 /etc/mysql 这个路径下

cd /etc/mysql   #进入配置文件目录
cp my.cnf my.cnf.back # 以防万一先备份

        编辑my.cnf配置文件,在其中添加下面的内容:

[client]
port        = 3306   #端口
socket      = /tmp/mysql.sock   #MYSQL Socket通信文件位置

[mysqld]
port        = 3306  #端口 
socket      = /tmp/mysql.sock  #MYSQL Socket通信文件位置
user = mysql    #用户
basedir = /usr/local/MySQL/ #mysql源码安装位置
datadir = /data/mysql/   #mysql数据存放位置
pid-file = /data/mysql/mysql.pid  #进程文件存放路径

log-error = /data/mysql/mysql-error.log  #报错日志存放路径

2. 创建新用户

        创建MySQL数据文件夹

mkdir -p /data/mysql

        创建mysql用户

useradd -s /sbin/nologin mysql

        授权数据存放路径可写权限 

chown mysql . /data/mysql/
chown -R mysql. /data/mysql/

3. 初始化MySQL

        进入安装路径下的bin目录

cd /usr/local/MySQL/bin/

        使用“--initialize”初始化命令执行后,会生成一个随机密码,用来之后登录MySQL,在输出的最后一行(如:root@localhost:AUCd3=fhb8f5)。需要记录下来,登录MySQL之后再修改密码,如果使用 --initialize-insecure初始化,这样默认密码为空。

./mysqld --initialize --user=mysql --basedir=/usr/local/MySQL/ --datadir=/data/mysql/

--user=mysql                                 #<---用户

--basedir=/usr/local/MySQL          #<---数据库安装路径

--datadir=/data/mysql/                   #<---数据库文件路径

4. 拷贝启动脚本

        将启动脚本拷贝到/etc/init.d目录下,命名为mysqld

// 进入开启mysql执行文件的目录
cd /usr/local/MySQL/support-files
// 把开启执行文件拷贝到/etc/init.d目录下面
cp mysql.server /etc/init.d/mysqld

5. 启动

        使用下面的命令直接启动MySQL服务:

/etc/init.d/mysqld start

        启动后会占用3306端口,使用下面命令检查3306端口,判断服务是否开启:

netstat -nltp

        也可以用下面的命令查询MySQL是否启动:

ps -ef | grep mysql

6. 配置环境变量

        使用echo $PATH命令查询当前的环境变量。

        添加MySQL的路径到环境变量中:

echo “export PATH=/usr/local/MySQL/bin:$PATH” >> /etc/profile

        使用下面命令保存,使环境变量生效:

source /etc/profile

7. 登录MySQL

        使用下面的命令登录MySQL,密码就是初始化时生成的随机密码:

mysql -u root -p AUCd3=fhb8f5

        如果忘记上面的随机密码的话,在my.cnf配置文件中添加一行:

skip-grant-tables

        然后重启服务器,这样再次登录时就不需要密码:

// 重启MySQL服务器
systemctl restart mysqld

        登录成功后使用下面的命令修改密码:

update mysql.user set authentication_string ='123456' where user="root";

        使用quit退出MySQL。


三、Qt连接MySQL数据库

1. 编译QMySQL驱动

        由于在QT5的版本中移除了MySQL数据库驱动libqsqlmysql.so,因此我们需要重新编译QT源码中的MySQL驱动,以生成libqsqlmysql.so。

        首先需要你安装的Qt版本的源码,可以在官网选择自己的版本下载:Index of /archive/qt

        找到源码中QMySQL驱动的源码,在Qt源码路径下的qtbase/src/plugins/sqldrivers/mysql,进入路径下后可以看到有这几个源码文件。

        使用Qt打开其中的mysql.pro工程文件,并按照下面这样修改mysql.pro文件,添加的两个路径为安装的MySQL下的Include路径和lib路径:

        修改完后,点击编译即可,编译后生成的库的路径是qtbase/plugins/sqldrivers/,可以看到下面有编译后生成的libqsqlmysql.so库文件。

        把这个库文件复制到Qt的安装路径下的/plugins/sqldrivers/,并把MySQL安装路径下的lib文件夹里的libmysqlclient.so相关的3个库文件都复制到/usr/lib文件夹下。否则Qt调用MySQL的时候,会报QSqlDatabase: QMYSQL driver not loaded错误。因为libqsqlmysql.so这个库依赖于libmysqlclient.so这个库,不加到/usr/lib路径下的话可能会找不到。

2. 测试QT连接MySQL数据库

        最后使用Qt代码连接MySQL测试,Qt连接MySQL需要先在pro文件中加上:

QT += sql

        引用头文件<QSqlDatabase>,并用下面的代码查询当前Qt支持的数据库驱动:

qDebug() << QSqlDatabase::drivers();
//再次查看QT支持的数据库驱动,可以看到已经支持MySQL了!
("QSQLITE", "QMYSQL", "QMYSQL3")

        使用下面的代码连接数据库:

// 测试数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");// 设置数据库连接参数
db.setHostName("127.0.0.1");
db.setDatabaseName("demo");
db.setUserName("root");
db.setPassword("123456");// 尝试连接数据库
if (db.open())
{qDebug() << "Connected to database"; 
}
else
{qDebug() << "Failed to connect to database:" << db.lastError().text();
}QSqlQuery query;
query.exec("SELECT * FROM student");
while (query.next())
{QString value = query.value(0).toString();// 处理查询结果qDebug() << value;
}
db.close(); //关闭数据库

相关文章:

  • 告别虚拟机,在Windows10启动Linux子系统
  • C#面:DataReader与Dataset有什么区别
  • AI Agent智能体概述及原理
  • Android Dialog软键盘弹出问题完美解决办法
  • 自然语言处理(NLP)中的迁移学习
  • IEEE Latex模版踩雷避坑指南
  • 每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》
  • 基于transformers框架实践Bert系列6-完形填空
  • C++进程间通信 消息队列
  • STEP 7-MicroWIN SMART
  • TalkingData数据统计的力量
  • 短信平台-平台群发短信
  • 用户接入和认证技术
  • Sql语法3
  • 【芯片验证方法】
  • ----------
  • php的引用
  • 【刷算法】求1+2+3+...+n
  • Android系统模拟器绘制实现概述
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Java 多线程编程之:notify 和 wait 用法
  • Nodejs和JavaWeb协助开发
  • vue 配置sass、scss全局变量
  • 初识 webpack
  • 分布式任务队列Celery
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # Panda3d 碰撞检测系统介绍
  • (1)Hilt的基本概念和使用
  • (12)目标检测_SSD基于pytorch搭建代码
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (苍穹外卖)day03菜品管理
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第61天)多租户架构(CDB/PDB)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • .bat文件调用java类的main方法
  • .gitignore文件_Git:.gitignore
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .sh
  • @RequestMapping用法详解
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [51nod1610]路径计数
  • [AI 大模型] Meta LLaMA-2
  • [C++][数据结构][跳表]详细讲解
  • [CSS] 点击事件触发的动画
  • [Golang] goroutine
  • [hdu 3746] Cyclic Nacklace [kmp]
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [Jsprit]Jsprit学习笔记-一个简单的示例
  • [kylin M900]麒麟操作系统固件修改与合成
  • [LeetCode] 197. 上升的温度
  • [leetcode] Multiply Strings
  • [Linux]磁盘分区指令