失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > linux(ARM架构)下的mysql安装 QT连接mysql数据库(完整版)

linux(ARM架构)下的mysql安装 QT连接mysql数据库(完整版)

时间:2024-02-29 07:41:33

相关推荐

linux(ARM架构)下的mysql安装 QT连接mysql数据库(完整版)

一、安装MYSQL之前要先换源

二、安装MYSQL

1、安装

2、安装完成

3、安装后无法登陆

3.1 原因

3.2 登陆后切换database

3.3 修改密码(注意这里账号和密码是双引号)

3.4查看一下用户

3.5然后进行刷新使得配置生效

3.6 退出

3.7 重启

三、mysql使用测试

四、QT编译MYSQL库

1.安装依赖包

2.修改MYSQL.PRO文件

3.修改QSQLDRIVERBASE.PRI文件

4.做qmake准备,否则会出错

5. 进行qmake和编译make

6. 复制编译的库文件

五、QT连接数据库

1、测试代码

2、出现问题

3、解决问题

3.1 查看加密方式

3.2 修改加密方式和用户密码

3.3刷新授权表

3.4 测试连接

一、安装MYSQL之前要先换源

1.备份系统之前的源,也可以不备份,将之前的源注释掉

cp /etc/apt/sources.list /etc/apt/sources.list.bak

2.修改源文件/etc/apt/sources.list

vim /etc/apt/sources.list

将原来的内容删除,将下面的源内容粘贴上。

3.这里推荐比较好的两个国内源

3.1阿里源(arm64,速度快,推荐)

deb /ubuntu-ports/ xenial maindeb-src /ubuntu-ports/ xenial maindeb /ubuntu-ports/ xenial-updates maindeb-src /ubuntu-ports/ xenial-updates maindeb /ubuntu-ports/ xenial universedeb-src /ubuntu-ports/ xenial universedeb /ubuntu-ports/ xenial-updates universedeb-src /ubuntu-ports/ xenial-updates universedeb /ubuntu-ports/ xenial-security maindeb-src /ubuntu-ports/ xenial-security maindeb /ubuntu-ports/ xenial-security universedeb-src /ubuntu-ports/ xenial-security universe

3.2 华为源(arm64,速度快,二者选其一)

deb /ubuntu-ports/ bionic main restricted universe multiversedeb-src /ubuntu-ports/ bionic main restricted universe multiversedeb /ubuntu-ports/ bionic-security main restricted universe multiversedeb-src /ubuntu-ports/ bionic-security main restricted universe multiversedeb /ubuntu-ports/ bionic-updates main restricted universe multiversedeb-src /ubuntu-ports/ bionic-updates main restricted universe multiversedeb /ubuntu-ports/ bionic-backports main restricted universe multiversedeb-src /ubuntu-ports/ bionic-backports main restricted universe multiverse## Not recommended# deb /ubuntu-ports/ bionic-proposed main restricted universe multiverse# deb-src /ubuntu-ports/ bionic-proposed main restricted universe multiverse

4.更新仓库

apt-get update

4.1处理报错

可能出现报错

由于没有公钥,无法验证下列签名...

以下命令解决:

sudo apt-key adv --recv-keys --keyserver 40976EAF437D05B5 3B4FE6ACC0B21F32

5.清除软件仓库缓存

apt-get clean

6.更新软件仓库

apt-get update

完成,可以安装MYSQL了

二、安装MYSQL

1、安装

sudo apt-get install mysql-server//服务端sudo apt-get install mysql-client//客户端sudo apt-get install libmysqlclient-dev //程序编译时链接的库

2、安装完成

安装完成之后dpkg命令查看状态

dpkg -l | grep mysql

输出以下信息则安装成功

ii mysql-client-5.75.7.39-0ubuntu0.18.04.2 arm64 MySQL database client binariesii mysql-client-core-5.75.7.39-0ubuntu0.18.04.2 arm64 MySQL database core client binariesii mysql-common 5.8+1.0.5 allMySQL database common files, e.g. /etc/mysql/fii mysql-server 5.7.39-0ubuntu0.18.04.2 allMySQL database server (metapackage depending on the latest version)ii mysql-server-5.75.7.39-0ubuntu0.18.04.2 arm64 MySQL database server binaries and system database setupii mysql-server-core-5.75.7.39-0ubuntu0.18.04.2 arm64 MySQL database server binaries

使用如下命令启动mysql

service mysql start

启动后使用如下命令查看状态

sudo netstat -anp | grep mysql

显示如下说明启动成功:

tcp6 00 :::3306 :::*LISTEN27608/mysqld unix 2[ ACC ]STREAMLISTENING648125 27608/mysqld /var/run/mysqld/mysqld.sockunix 3[ ] STREAMCONNECTED648111 27608/mysqld

使用命令进行登陆

mysql -u root -p

输入密码,进行登陆,如果之前没有设置密码请看第3步

aaron@aaron-Raytine-PC:~$ mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 9

Server version: 5.7.30-0ubuntu0.18.04.1 (Ubuntu)

Copyright © 2000, , Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

3、安装后无法登陆

3.1 原因

原因一(大部分):

你是root安装的: 在本机命令行下输入: mysql -uroot 就可以直接登录,然后修改用户名密码啥的

原因二:

使用mysql -u root -p命令但是不知道root密码是因为之前没有设置,这个时候进行环境配置,设置root密码。

1、首先,进行忽略密码登陆,打开配置文件

sudo vi /etc/mysql/mysql.conf.d/f

2、在最后加入skip-grant-tables

## Read the manual, too, if you want chroot!# chroot = /var/lib/mysql/## For generating SSL certificates I recommend the OpenSSL GUI "tinyca".## ssl-ca=/etc/mysql/cacert.pem# ssl-cert=/etc/mysql/server-cert.pem# ssl-key=/etc/mysql/server-key.pemskip-grant-tables-- 插入 --

3、保存退出

4、重启以下mysql服务

sudo service mysql stop

sudo service mysql start

5、重新登陆

mysql -u mysql

进行3.2步骤,所有步骤执行完注释掉skip-grant-tables

原因三:没有把之前的mysql卸载干净

彻底删除MySQL

在删除mysql前 须要先删除一下 /var/lib/mysql 还有 /etc/mysqlubuntu

先停止mysql服务

systemctl stop mysql

须要输入如下几条命令

sudo rm /var/lib/mysql/ -R sudo rm /etc/mysql/ -Rsudo apt-get autoremove mysql* --purgesudo apt-get remove apparmor

确保没有mysql的文件夹可忽略此步骤

sudo find / -name mysql

再次安装

sudo apt-get install mysql-server//服务端sudo apt-get install mysql-client//客户端sudo apt-get install libmysqlclient-dev //程序编译时链接的库

3.2 登陆后切换database

登录

~$ sudo mysql -u root -pEnter password:

直接回车

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.39-0ubuntu0.18.04.2 (Ubuntu)Copyright (c) 2000, , Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

换为database

mysql> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql>

3.3 修改密码(注意这里账号和密码是双引号)

mysql> update user set authentication_string=PASSWORD("123456") where user="root";Query OK, 1 row affected, 1 warning (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 1

3.4查看一下用户

select user,host from mysql.user;

出现以下信息则配置完成

mysql> select user,host from mysql.user;+------------------+-----------+| user | host|+------------------+-----------+| debian-sys-maint | localhost || mysql.session | localhost || mysql.sys | localhost || root | localhost |+------------------+-----------+4 rows in set (0.00 sec)

3.5然后进行刷新使得配置生效

flush privileges;

3.6 退出

quit

3.7 重启

sudo service mysql restart

三、mysql使用测试

1、建立一个数据库

mysql> create database joyrun;Query OK, 1 row affected (0.00 sec)

2、查看当前数据库

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || joyrun || mysql || performance_schema || sys|+--------------------+5 rows in set (0.00 sec)

3、建立一个表

mysql> use joyrunDatabase changedmysql> create table tbl_run(id int,name varchar(5),primary key (id));Query OK, 0 rows affected (0.01 sec)

4、查看表的结构

mysql> desc tbl_run;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || name | varchar(5) | YES || NULL | |+-------+------------+------+-----+---------+-------+2 rows in set (0.00 sec)

5、修改字节长度

mysql> alter table tbl_run modify column name varchar(20);Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc tbl_run;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11)| NO | PRI | NULL | || name | varchar(20) | YES || NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.00 sec)

6、现在表中不能添加中文字段,修改字符集后才可以

修改库字符集:alter database joyrun character set utf8;修改表字符集:alter table tbl_run character set utf8;修改字段字符集:alter table tbl_run change name name varchar(20) character set utf8;

7、增加一条数据

mysql> insert into tbl_run (id,name) values (1,'xiaoming');Query OK, 1 row affected (0.01 sec)mysql> select * from tbl_run;+----+----------+| id | name|+----+----------+| 1 | xiaoming |+----+----------+1 row in set (0.00 sec)

四、QT编译MYSQL库

1.安装依赖包

sudo apt-get install opensslsudo apt-get install libssl-dev

2.修改MYSQL.PRO文件

该文件在qt安装目录下,src中,别找错了,qt源码目录有几个src,在我的ubuntu上,是这个路径

qt-everywhere-src-5.11.3/qt-everywhere-src-5.11.3/qtbase/src/plugins/sqldrivers

打开pro文件,将QMAKE_USE注释掉

TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.hSOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugininclude(../qsqldriverbase.pri)

3.修改QSQLDRIVERBASE.PRI文件

返回到上层目录

找到qsqldriverbase.pri文件,打开

将include(shadowed(shadowed(PWD)/qtsqldrivers-config.pri)注释掉并添加

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include($$shadowed($$PWD)/configure.pri)

QT = core core-private sql-private# For QMAKE_USE in the parent projects.#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include($$shadowed($$PWD)/configure.pri)PLUGIN_TYPE = sqldriversload(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4.做qmake准备,否则会出错

4.1修改头文件

首先使用命令sudo apt install default-libmysqlclient-dev

第二步使用sudo apt-get install libmariadbclient-dev命令,如果是这样,那么你在linux中就应该能引入头文件<mysql/mysql.h>

第三步,修改qsql_mysql_p.h文件,#include <mysql.h>修改为#include <mysql/mysql.h>

#include <QtSql/qsqldriver.h>#if defined (Q_OS_WIN32)#include <QtCore/qt_windows.h>#endif//#include <mysql.h>#include <mysql/mysql.h>#ifdef QT_PLUGIN#define Q_EXPORT_SQLDRIVER_MYSQL#else#define Q_EXPORT_SQLDRIVER_MYSQL Q_SQL_EXPORT#endif

此步骤不执行会出现错误

mysql/qsql_mysql.cpp:57:10: fatal error: QtSql/private/qsqldriver_p.h: No such file or directory #include <QtSql/private/qsqldriver_p.h>

4.2 执行

sudo apt-get install qtbase5-private-dev

此步骤不执行会出现错误

qsql_mysql.cpp:55:10: fatal error: QtSql/private/qsqldriver_p.h: No such file or directory #include <QtSql/private/qsqldriver_p.h>

5. 进行qmake和编译make

qt-everywhere-src-5.11.3/qt-everywhere-src-5.11.3/qtbase/src/plugins/sqldrivers/mysql$ (源码路径)sudo qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient" mysql.pro

qmake生成Makefile文件

sudo make

6. 复制编译的库文件

在/Qt安装目录qt-everywhere-src-5.11.3/qt-everywhere-src-5.11.3/qtbase/src/plugins/sqldrivers/plugins/sqldrivers一个文件

把它们拷贝到//usr/lib/aarch64-linux-gnu/qt5/plugins/sqldrivers

aarch64-linux-gnu根据linux版本不同,选择也不同

五、QT连接数据库

1、测试代码

QT连接mysql数据库测试代码如下,

qDebug()<<"available drivers:";QStringList drivers = QSqlDatabase::drivers();foreach(QString driver, drivers)qDebug()<<driver;QSqlDatabase db(QSqlDatabase::addDatabase( "QMYSQL" ));db.setHostName("127.0.0.1");db.setDatabaseName("joyrun");db.setUserName("root");db.setPassword("123456");if(!db.open())/*测试数据库是否链接成功*/{qDebug()<<db.lastError()<<endl;}else{qDebug()<<"connect mysql success!"<<endl;}

2、出现问题

available drivers:"QSQLITE""QMYSQL""QMYSQL3"QSqlError("1698", "QMYSQL: Unable to connect", "Access denied for user 'root'@'localhost'")

可以看到QMYSQL驱动已经被加载,但是连接mysql数据库出现问题

QSqlError("1698", "QMYSQL: Unable to connect", "Access denied for user 'root'@'localhost'")

3、解决问题

这种问题通常是因为,用户的密码加密方式不正确导致的。

3.1 查看加密方式

mysql> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select User,Host,plugin from user;+------------------+-----------+-----------------------+| User | Host| plugin|+------------------+-----------+-----------------------+| root | localhost | auth_socket || mysql.session | localhost | mysql_native_password || mysql.sys | localhost | mysql_native_password || debian-sys-maint | localhost | mysql_native_password |+------------------+-----------+-----------------------+4 rows in set (0.00 sec)

可以看到root的加密方式为auth_socket

3.2 修改加密方式和用户密码

alter user 'root'@'localhost' identified with mysql_native_password by '用户对应的密码';

mysql_native_password 是 mysql5.7版本的加密方式。caching_sha2_password 是 mysql8.0版本的加密方式。

3.3刷新授权表

flush privileges;

3.4 测试连接

重新运行测试程序,问题解决,QT成功连接了数据库

available drivers:"QSQLITE""QMYSQL""QMYSQL3"connect mysql success!

如果觉得《linux(ARM架构)下的mysql安装 QT连接mysql数据库(完整版)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。