MySQL安装
在线安装
ubuntu
sudo apt-get install mysql-server # 服务器
sudo apt-get install mysql-client # 客户端
sudo apt-get install libmysqlclient-dev # 开发接口
redhat
yum install mysql-server
yum install mysql-client
yum install libmysqlclient-dev
该平台还可使用安装包进行安装:
rpm -ivh mysql-5.1.71-1.el6.i686.rpm mysql-libs-5.1.71-1.el6.i686.rpm
rpm -ivh mysql-server-5.1.71-1.el6.i686.rpm
perl-DBD-MySQL-4.013-3.el6.i686.rpm
perl-DBI-1.609-4.el6.i686.rpm
源码安装
源码下载
源码下载地址:https://dev.mysql.com/downloads/mysql/
旧版本地址:https://downloads.mysql.com/archives/community/
勾选相应版本进行下载。如上所选即为平台通用的源码包(mysql-5.6.51.tar.gz)。
源码编译安装
注意:MySQL 源码编译依赖于 cmake 工具,所以需提前安装,此处不进行介绍。
获取源码包后,上传至目标服务器解压并进入解压目录,进行编译安装:
sudo mkdir -p /usr/local/mysql
sudo mkdir -p /usr/local/mysql/data
tar -zxf mysql-5.6.51.tar.gz
cd mysql-5.6.51/
sudo cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1
sudo make
sudo make install
安装完成后,进行简单配置,保证其可用
# 调整安装路径拥有者,最好创建一个mysql用户及用户组(此处直接使用我原有用户uxdb)
sudo chown -R uxdb:uxdb /usr/local/mysql/
# 调整配置文件
sudo mv /etc/my.cnf /etc/my.cnf.bak
sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod a+x /etc/init.d/mysqld
# 配置mysql相关环境变量
sudo echo "export PATH=/usr/local/mysql/bin/:$PATH" >> /etc/profile
source /etc/profile
安装测试
环境配置完成后,既可以初始化数据库并启动服务:
# 初始化db
/usr/local/mysql/scripts/mysql_install_db --user=uxdb --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 启动mysql服务
[uxdb@ux67:~/tools/mysql-5.6.51]$ service mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL. SUCCESS!
# 设置默认用户密码为“123456”,密码默认为空
[uxdb@ux67:~/tools/mysql-5.6.51]$ mysqladmin -u root -p password "123456"
Enter password:
Warning: Using a password on the command line interface can be insecure.
[uxdb@ux67:~/tools/mysql-5.6.51]$
要验证数据库可用,首先检查服务是否已经正常启动(安装成功如下所示):
[uxdb@ux67:~/tools/mysql-5.6.51]$ sudo netstat -tap | grep mysql
[sudo] password for uxdb:
tcp6 0 0 [::]:mysql [::]:* LISTEN 125456/mysqld
启动没有异常就可以登录 mysql 数据库(quit 可以退出):
# 登录客户端
[uxdb@ux67:~/tools/mysql-5.6.51]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.51 Source distribution
Copyright (c) 2000, 2021, 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>
MySQL 数据库操作
常用SQL
-- 创建数据库:
create database xxxx;
-- 切换数据库:
use xxxx;
-- 查询数据库表:
show tables;
-- 创建数据库表:
create table user(id int ,name text,pass text);
-- 插入数据:
insert into user values(1,"zhangsan","1245");
-- 查询数据:
select * from user;
-- 修改数据:
update user set pass = "32535" where id = 1;
-- 删除数据:
delete from user where id = 1;
-- 查询表结构:
desc user;
-- 删除表:
drop table user;
-- 删除数据库:
drop database test;
工具备份
# 备份数据库: 在数据库外部的shell命令中即可执行
mysqldump -u root -p --opt 数据库名>备份名称
# 还原数据库: 在数据库外部执行shell命令即可
mysql -u root -p 数据库名<备份名称
# 脚本导入导出:
# 导出:
mysqldump -u root -p 数据库名>xxx.sql
# 导入:
mysql>source xxx.sql
MySQL 编程接口
MySQL 的整个公共框架包括:
初始化
====> 连接数据库
====> 操作数据库
====> 断开数据库
编译依赖
编译 MySQL 相关代码,必须要 MySQL 对应头文件 #include <mysql.h>
----> /usr/local/mysql/include/mysql.h
编译方式:
gcc -o mysql_test ./mysql_test.c \
-I/usr/local/mysql/include/ \
-L/usr/local/mysql/lib/ \
-lmysqlclient
C接口
MYSQL *mysql_init(MYSQL *mysql) ;
功能:初始化数据库句柄;
参数:mysql 要用于链接数据库的句柄;
返回值:成功 返回有效数据库句柄;失败 NULL
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,
const char *user, const char *passwd,
const char *db, unsigned int port,
const char *unix_socket, unsigned long client_flag);
功能:该函数可以指定连接目标mysql数据。
参数:
mysql 数据库句柄;
host 要连接的目标 mysql 数据库的主机名称,一般是当前主机就用 “loalhost”
user 目标 mysql 数据库的用户名称,一般是 root 的默认用户
passwd 目标 mysql 数据库的登录密码,一般就是创建时候的默认 root 账户密码
db 数据库系统中的数据库名称,类似于 use 命令后面跟的数据库名称
port 数据库的默认登录端口号,如果没有修改就 0 表示
unix_socket 如果是当前主机就用 NULL 表示
client_flag 用 0 表示默认匹配。
返回值:成功 返回连接成功的目标数据库地址;失败 NULL
数据库操作接口
主要涉及的有:mysql_real_query()
===> mysql_store_result()
===> mysql_fetch_row()
===> mysql_free_result()
,详细说明如下:
// 1
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
功能:该函数可以在指定数据库中执行指定的sql语句;
参数:
mysql 数据库句柄
query 要执行的 sql 语句
length 要执行的 sql 语句长度
返回值:成功 0 失败 非0
// 2
MYSQL_RES *mysql_store_result(MYSQL *mysql)
功能:从查询语句的执行获取其最终的结果集;
参数:mysql 数据库句柄
返回值:成功是结果集 == MYSQL_RES ;失败 NULL
// 3
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
功能:从结果集中获取一行有效数据。
参数:result 就是mysql_store_result的结果集地址
返回值:如果到达获取数据的结尾,则NULL;如果有效数据则返回数据数组
// 4
void mysql_free_result(MYSQL_RES *result)
功能:该函数可以释放最终的目标结果集,防止内存泄漏;
参数:result 结果集地址
返回值:无
// 5
void mysql_close(MYSQL *mysql)
功能:断开连接的数据库
注意: 数据库查询的行和列的获取由如下函数:
mysql_num_fields() // 查询结果的列的个数
mysql_num_rows() // 查询结果的行的个数
mysql_error() // 错误捕获
示例代码如下:
MYSQL_FIELD *fields; //保存字段名字信息
unsing int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result); //获取查询结果中,字段的个数
fields = mysql_fetch_fields(result); //获取查询结果中,各个字段的名字
for(i = 0; i < num_fields;i++)
{
printf("field %u is %s\n",i,fields[i].name);
}