开发环境

  • WSL2 + Ubuntu-24.04
  • mysql-8.0.43

MySQL 安装与配置

  • mysql-server 安装
1
2
3
4
5
sudo apt-get update
sudo apt-get install mysql-server

# 查看 mysql 的版本
mysql --version
  • 客户端库开发包安装,提供头文件和链接库
1
sudo apt-get install libmysqlclient-dev

数据库建立

登录 MySQL 服务

1
2
3
4
5
# 远程
mysql -h localhost -P 3306 -u root -p

# 本机
mysql -u root -p

可能会遇到如下报错信息:

1
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

这是因为MySQL默认使用了 UNIX auth_socket 插件进行认证。解决方案可参考:stackoverflow

这里使用回答中推荐的第2种方案,即创建一个与系统用户一致的新的数据库用户:

  • 注意:tws 可修改为自定义用户名
1
2
3
4
5
6
7
8
9
$ sudo mysql -u root

mysql> USE mysql;
mysql> CREATE USER 'tws'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tws'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ sudo service mysql restart

之后登录 MySQL 服务就可以使用如下命令:

1
2
$ mysql -u tws -p
# 默认没有密码,回车即可登录

建立数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ mysql -u tws -p

# 建立 twsdb 库
mysql> create database twsdb;

# 创建 user 表
mysql> USE twsdb;
mysql> CREATE TABLE user(
username char(50) NULL,
passwd char(50) NULL
)ENGINE=InnoDB;

# 添加数据
mysql> INSERT INTO user(username, passwd) VALUES('admin', '123456');

编译

代码修改

  • 修改 main.cpp 中的如下内容:
1
2
3
4
//需要修改的数据库信息,登录名,密码,库名
string user = "tws";
string passwd = "";
string databasename = "twsdb";

build

1
2
3
$ chmod +x build.sh

$ ./build.sh

运行

run

1
./server

服务访问

其它

MySQL 常用命令

1
2
3
4
5
6
7
# 启动、关闭、重启 MySQL服务
sudo service mysql start
sudo service mysql stop
sudo service mysql restart

# 查看MySQL服务状态
sudo service mysql status

MySQL 用户认证方式查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo mysql -u root

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | auth_socket |
| tws | localhost | auth_socket |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

MySQL 删除用户

1
mysql> DROP USER 'tws'@'localhost';