如果您想了解linux下C++访问mysql数据库和2的知识,那么本篇文章将是您的不二之选。我们将深入剖析linux下C++访问mysql数据库的各个方面,并为您解答2的疑在这篇文章中,我们将为您介绍
如果您想了解linux下C++访问mysql数据库和2的知识,那么本篇文章将是您的不二之选。我们将深入剖析linux下C++访问mysql数据库的各个方面,并为您解答2的疑在这篇文章中,我们将为您介绍linux下C++访问mysql数据库的相关知识,同时也会详细的解释2的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- linux下C++访问mysql数据库(2)(linux怎么访问数据库)
- C#访问MySQL数据库(winform+EF)
- linux(ubuntu)下C++访问mysql数据库
- Linux上通过MySQL命令访问MySQL数据库时常见问题汇总
- Linux下 快速安装mysql数据库(附mysql下载路径)
linux下C++访问mysql数据库(2)(linux怎么访问数据库)
在这个程序中,比上一次的要完善一些,实现了通过C++对数据表进行添加,修改,插入,删除的功能。
头文件——myDB.h:
#ifndef myDB_class
#define myDB_class
#include <iostream>
#include <string>
#include <mysql/mysql.h>
class myDB
{
public:
myDB();
~myDB();
int initDB(std::string host, std::string user, std::string password, std::string db_name);
void Run();
private:
int exeSQL();
int insertSQL();
int deleteSQL();
int updateSQL();
MYSQL *connection;
MYSQL_RES *result;
MYSQL_ROW row;
};
#endif
myDB.cpp
#include "myDB.h"
#include <iostream>
#include <cstdlib>
using namespace std;
myDB::myDB()
{
connection = mysql_init(NULL); // 初始化数据库的连接变量
if(connection == NULL)
{
std::cout << "error:" << mysql_error(connection);
exit(1); // exit(1)表示发生错误后退出程序, exit(0)表示正常退出
}
}
myDB::~myDB()
{
if(connection != NULL)
{
mysql_close(connection); // 关闭数据库连接
}
}
int myDB::initDB(std::string host, std::string user, std::string password, std::string db_name)
{
char value = 1;
mysql_options(connection_,MYSQL_OPT_RECONNECT,(char*)&value);//mysql自动重连
connection = mysql_real_connect(connection, host.c_str(), user.c_str(), password.c_str(), db_name.c_str(), 0, NULL, 0); // 建立数据库连接
if(connection == NULL)
{
std::cout << "error:" << mysql_error(connection);
exit(1); // exit(1)表示发生错误后退出程序, exit(0)表示正常退出
}
return 0;
}
int myDB::exeSQL()
{
// mysql_query()执行成功返回0,失败返回非0值。与PHP中不一样
std::string sql;
sql = "select * from user;";
if(mysql_query(connection, sql.c_str()))
{
std::cout << "Query Error:" << mysql_error(connection);
exit(1);
}
else
{
result = mysql_use_result(connection); // 获取结果集
// mysql_field_count()返回connection查询的列数
for(int i=0; i < mysql_field_count(connection); ++i)
{
// 获取下一行
row = mysql_fetch_row(result);
if(row <= 0)
{
break;
}
// mysql_num_fields()返回结果集中的字段数
for(int j=0; j < mysql_num_fields(result); ++j)
{
std::cout << row[j] << " ";
}
std::cout << endl;
}
std::cout << endl;
// 释放结果集的内存
mysql_free_result(result);
}
return 0;
}
int myDB::insertSQL()
{
std::string username;
std::string psd;
std::string level;
std::cout << "请输入id、username、password、level:" << std::endl;
std::cin >> username >> psd >> level;
string sql = "insert into user(id,username,password,level) values ( NULL,''" + username +"'',''"+ psd +"'', "+ level +");";
if(mysql_query(connection, sql.c_str()))
{
std::cout << "Query Error:" << mysql_error(connection);
exit(1);
}
std::cout << endl;
exeSQL();
return 0;
}
int myDB::deleteSQL()
{
std::string id;
std::cout << "输入要删除用户的ID:" << std::endl;
std::cin >> id;
std::string sql;
sql = "delete from user where id = " + id + ";";
if(mysql_query(connection, sql.c_str()))
{
std::cout << "Query Error:" << mysql_error(connection);
exit(1);
}
std::cout << endl;
exeSQL();
return 0;
}
int myDB::updateSQL()
{
std::string id;
std::string thing;
std::cout << "请输入要修改的用户的id与内容(eg:修改1号用户的姓名,输入:1 【回车】 username = ''Mary'')" << std::endl;
std::cin >> id >> thing;
std::string sql;
sql = "update user set " + thing + "where id =" + id + ";";
if(mysql_query(connection, sql.c_str()))
{
std::cout << "Query Error:" << mysql_error(connection);
exit(1);
}
std::cout << endl;
exeSQL();
return 0;
}
void myDB::Run()
{
int i = 1;
while(i != 0)
{
int sel;
std::cout << "1、查询 2、添加 3、删除 4、修改 5、退出" << std::endl;
std::cin >> sel;
switch(sel)
{
case 1:exeSQL();
break;
case 2:insertSQL();
break;
case 3:deleteSQL();
break;
case 4:updateSQL();
break;
case 5:i = 0;
break;
default:std::cout << "error" << std::endl;
break;
}
}
}
main.cpp
#include <iostream>
#include "myDB.h"
int main()
{
myDB db;
db.initDB("localhost", "root", "wei123", "wei");
db.Run();
return 0;
}
所有代码就都在这里了,下面是makefile文件
Makefile
mydb:main.cpp myDB.cpp
g++ -o mydb main.cpp myDB.cpp -lmysqlclient
clean:
rm -f *.o mydb
(g++ 和rm之前用Tab隔开)
C#访问MySQL数据库(winform+EF)
以前都是C#连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winform 访问MYSQL,当然使用winfrom,还是wfp,以及其他的技术这里不讨论,个人觉得这个比较上手快。
http://jingyan.baidu.com/article/642c9d34aa809a644a46f717.html
1、安装MYSQl数据库,这里略过,可以参考此文档进行安装。
此文档已经比较细致了,安装并不复杂,主要是下一步下一步就行了,要会基本的配置,这里我的数据库用户名还是sa(建议自己建立一个用户),root的用户名和密码我们这里暂不使用。
2、连接MYSQL数据库,可以采用自带的MySQL Workbench 6.2 CE工具
登录后就可以进行建表等操作了,这里我建立一个数据库名称为MY_OA的数据库,我们直接使用SQL语句执行并建立数据库然后刷新列表就可以查看到我们建立的数据库了
如图(1)(2)(3)(4)对应的步骤,另外建立了数据库后还需要建立几张表来存储数据,这些都是基础的和SQLserver大同小异的。
脚本如下:

1 CREATE database My_OA
2
3 CREATE TABLE my_oa.sys_user
4 (
5 id INT not NULL AUTO_INCREMENT PRIMARY KEY,
6 userName varchar(32),
7 pwd varchar(32)
8
9 );

当然也可以使用图形界面来配置,直接鼠标右键来建表,主要是看个人的习惯了,熟悉的话直接SQL句会方便很多也比较快,
这里我们快速的插入三条数据,便于以后测试使用,因为ID是自增的,所以可以不用管,插入后你会发现ID已经自己有了,只是MYSQL中AUTO_INCREMENT和SQLSEVE的identity的区别
1 INSERT INTO sys_user(userName,pwd) VALUES(''51diysoft'',''123'');
2
3 INSERT INTO sys_user (userName,pwd) VALUES(''xmd'',''123'');
4
5 INSERT INTO sys_user (userName,pwd) VALUES(''hjk'',''123'');
当然说道这里我们还可以使用VS2013来连接MYSQL数据库,因为后边的EF框架要访问,肯定也能够连接吧,
我们打开VS的【视图】【服务器资源】,点到【数据库连接】右键添加“数据库”,然后就和正常连接SQLServer的步骤一样了
此处选择MYSQL就行了,正常情况下安装MYSQL的时候就会把VS对应的连接驱动等相关内容直接加入的,不用去手动加的,当然看到这里也是可以连接Oracel数据库的,红线标记的地方,道理应该类似。
下边需要服务器的地址,用户名和密码,最好测试能够连接通过,我这里是sa用户(注意不是默认的),是自己建立的一个用户,默认的是root,如果需要root来登录服务器的话必须在安装MYSQL的时候注意勾选,否则就要新建一个用户来操作。
这里数据已经有了,另外我们还可以使用SQLdbx、Navicat_Premium_11.0.10等数据库的客户端工具来连接,这工具智能提示比较强,而且体积小便于携带和维护
下面我们就以SQLdbx为例,讲解一下如何连接数据库,其实都是一样的连接,如下:
SQldbx的下载地址和本次的SQl脚本例子可以到百度云下载:
第一步:
需要选择连接的数据库类型(MYSQL),这里也是可以连接其他类型数据库的,自己看吧,也可以试试
第二步:
也是输入用户名和密码连接就行了。
数据库可以为空,等登陆后再选择数据库也可以。
另外我们对比一下数据库表的复制,SQLServer我们直接可以这样复制(在select * from 表)的中间加入一个into 新表:
SELECT * INTO sys_user3 FROM sys_user
而在MYSQL中我们直接这样写是报错的:只有传统的建表再导数据了,比如
CREATE TABLE test
(
SELECT * FROM sys_user
)
,二期默认生成的这个id不会自动增长的,需要注意一下,我们主要是为了备份表的数据。
不同的数据库肯定有些小区别,慢慢研究吧。
3、如何使用VS2013建立MYSQL的项目(这里讲winform吧)
上边讲的有点多了,赶紧的
(1)、VS【文件】=》【新建】=》【项目】略过,注意选择对应的项目类型默认有winform和asp .net的自己选择,另外我们还需要选择EF的版本,
如何对Entity Framework没啥感觉,没关系,简单来说就是微软帮你连接了数据库的是一个实体框架,让你操作起来比较方便,不用过多去写SQLhelper并能和linq语句lamda表达式等结合起来,提高开发效率,这个是比较实用的。
参考介绍:
http://baike.baidu.com/link?url=jDHhtM4QGOpQJmgY9bCe24VJy4kgKAvsuRHJgGmuXlGilJ7lmVVzQkoVMX9KlYCmdagGACDm8042dQnR-E6_nq
另外还要说明的是EF的版本,我这里使用的是EF6,可以通过nuget工具包管理来获得最新版本
以下是建立VS项目的步骤截图:
以上步骤首先是新建一个MYSQL的连接,然后选择对应的表生成对应的EF实体框架,这样一个EF的winform项目基本就建立好了。
4、查看winfrom项目结构
打开对应的*.tt文件,这些就是EF自动生成的连接数据库后的相关实体类,就不用自己去建立类了(必要时需要自己建立Vew_Sys_User)

namespace MySql_Windows_Forms_Project2
{
using System;
using System.Collections.Generic;
public partial class sys_user
{
public int id { get; set; }
public string userName { get; set; }
public string pwd { get; set; }
}
}

然后我们还是调用一下EF生成的实体吧,做一个简单的登录页面和系统主页。
5、登录页面的实现
winform如何制作登录页面,基本流程就是拖动几个lable和textbox,并设置基本的属性,比如密码框为星号,窗口的起始位置为CenterScreen,是否最小化等等
我们就大概看一下代码吧,很简单的,使用的部分Linq的查询,结合EF框架操作,比较方便
(主要是体会流程,没有任何美化)

1 // 获取输入的用户名和密码
2 using (MyOAModelEntities db = new MyOAModelEntities())
3 {
4 string strUserName = txtUserName.Text.Trim();
5 string strPwd = txtPwd.Text.Trim();
6 //查询数据库中的记录
7 var userinfo = (from m in db.sys_user
8 where m.userName == strUserName && m.pwd == strPwd
9 select m).FirstOrDefault();
12 if (userinfo != null)
13 {
14 CurrentUserInfo = userinfo;//标记全局的用户 方便其他地方使用
15 // MessageBox.Show("登录成功!");
16 this.Hide();
17 MainWindow m = new MainWindow();
18 m.ShowDialog();
19 }
20 else
21 {
22 MessageBox.Show("用户名或者密码错误!");
23 }

Code下载地址:
http://pan.baidu.com/s/18n54i
以后将继续学习MYSQL数据库,另外个人在研究C# Mono for安卓,有兴趣的友友可以一起讨论,互勉!
linux(ubuntu)下C++访问mysql数据库
-
Ubuntu安装msyql
-
安装mysql数据库
sudo apt-get install mysql-server
-
安装mysql客户端
sudo apt-get install mysql-client
-
C API的基本类型
-
MYSQL
-
该结构代表1个数据库连接的句柄.
-
几乎所有的MySQL函数均使用它.
-
不应尝试拷贝MYSQL结构, 不保证这类拷贝结果会有用.
-
MYSQL_RES
-
该结构代表返回行的查询结果
-
MYSQL_ROW
-
这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。
-
行是通过调用mysql_fetch_row()获得的。
-
官方文档地址
-
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c
-
代码
-
向表中插入(删除)一条数据
#include <iostream> #include <mysql/mysql.h> using namespace std; int main(int argc, char* argv[]) { //准备mysql的访问结构 MYSQL mysql; mysql_init( &mysql ); mysql_real_connect( &mysql, "192.168.16.114", //要访问数据库的IP地址 "root", //用户名 "root", //密码 "test", //要访问的数据库 3306, //该数据库的端口 NULL, //一般为NULL 0 //一般为0 ); //插入 string sql = "insert into student value(1, ''jp'', 24, ''gzjd'')"; //删除 //string sql = "delete from student where id = 33"; //执行sql语句 mysql_query( &mysql, sql.c_str() ); //关闭数据库连接 mysql_close( &mysql ); return 0; } //编译 //g++ file.cpp -o target -lmysqlclient //执行 //./target //验证 //成功
-
更新表内容
#include <iostream> #include <mysql/mysql.h> using namespace std; int main(int argc, char* argv[]) { MYSQL mysql; mysql_init( &mysql ); mysql_real_connect( &mysql, "192.168.16.114", "root", "root", "test", 3306, NULL, 0 ); string sql = "update student set name = ''pj'' where id = 2"; mysql_query( &mysql, sql.c_str() ); mysql_close(&mysql); return 0; }
-
调用存储过程
#include <iostream> #include <mysql/mysql.h> using namespace std; int main(int argc, char* argv[]) { MYSQL mysql; mysql_init( &mysql ); mysql_real_connect( &mysql, "192.168.16.114", "root", "root", "test", 3306, NULL, 0 ); string sql = "call myPorc();"; int ret = mysql_query( &mysql, sql.c_str() ); // debug info // cout << mysql_error( &mysql ); // cout << ret << endl; mysql_close(&mysql); return 0; }
-
查询数据表的内容
#include <iostream> #include <mysql/mysql.h> using namespace std; int main(int argc, char* argv[]) { MYSQL mysql; mysql_init( &mysql ); mysql_real_connect( &mysql, "192.168.16.114", "root", "root", "test", 3306, NULL, 0 ); string sql = "select * from student"; mysql_query( &mysql, sql.c_str() ); MYSQL_RES *result = NULL; result = mysql_store_result( &mysql ); //得到查询出来所有数据的条数 int row_count = mysql_num_rows( result ); cout << "all data number: " << row_count << endl; //得到字段的个数和字段的名字 int field_count = mysql_num_fields( result ); cout << "field count : " << field_count << endl; //得到所有字段的名字 MYSQL_FIELD* field = NULL; for( int i = 0; i < field_count; ++i) { field = mysql_fetch_field_direct( result, i ); cout << field->name << "\t"; } cout << endl; //显示表中的所有数据 MYSQL_ROW row = NULL; row = mysql_fetch_row( result ); while ( NULL != row ) { for( int i = 0; i < field_count; ++i) { cout << row[i] << "\t"; } cout << endl; row = mysql_fetch_row( result ); } mysql_free_result(result); mysql_close( &mysql ); return 0; }
-
得到指定数据库test中的所有表
#include <iostream> #include <string> #include <vector> #include <mysql/mysql.h> using namespace std; int main(int argc, char* argv[]) { //定义一个数据库连接句柄 MYSQL mysql; //对数据句柄进行初始化 mysql_init( &mysql ); //连接数据库 mysql_real_connect( &mysql, "192.168.16.114", "root", "root", "test", 3306, NULL, 0 ); //查询数据库 string sql = "show tables;"; mysql_query( &mysql, sql.c_str() ); MYSQL_RES *result = NULL; result = mysql_store_result( &mysql ); //得到查询出来所有数据记录的数量 vector<string> allTable; MYSQL_ROW row = mysql_fetch_row( result ); while( NULL != row ) { allTable.push_back( row[0] ); row = mysql_fetch_row( result ); } for(vector<string>::const_iterator cit = allTable.begin(); cit != allTable.end(); ++cit ) { cout << *cit << "\t"; } cout << endl; mysql_free_result( result ); mysql_close( &mysql ); return 0; }
Linux上通过MySQL命令访问MySQL数据库时常见问题汇总
Linux上通过mysql命令访问MySQL数据库时常见问题汇总
1)创建登录账号
#创建用户并授权
#允许本地访问
create user ''test''@''localhost'' identified by ''123456'';
#允许外网访问
create user ''test''@''%'' identified by ''123456'';
#grant 权限 on 数据库.* to ''用户名''@''登录主机'' identified by ''密码'';
#原始密码为:123456 加密后的密码为:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
grant all privileges on *.* to ''root''@''%'' identified by password ''*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'' with grant option;
#用户通过本地IP访问数据库
grant all privileges on *.* to ''test''@''localhost'' identified by ''123456'';
#用户通过外网IP访问数据库
grant all privileges on *.* to ''test''@''%'' identified by ''123456'';
#刷新权限
flush privileges;
#创建数据库
create database 数据库名;
#删除数据库
drop database 数据库名;
#删除表
drop table 表名;
#删除用户及权限
drop user ''用户名''@''localhost'';
drop user ''用户名''@''%'';
#刷新权限
flush privileges;
2)正常登录的命令
mysql -utest -p123456 -P3306 -h192.168.48.129
3)mysql命令找不到
[roadexam@centos7 src]$ mysqls -utest -p123456 -P3306 -h192.168.48.129
bash: mysqls: command not found
4)参数u大写ERROR 1064 (42000)...use near ''st'' at line 1
[roadexam@centos7 src]$ mysql -Utest -p123456 -P3306 -h192.168.48.129
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''st'' at line 1
5)用户名错误 ERROR 1045 (28000)...Access denied
[roadexam@centos7 src]$ mysql -utest1 -p123456 -P3306 -h192.168.48.129
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ''test1''@''192.168.48.129'' (using password: YES)
6)P为大写或和密码之间有空格或密码错误 ERROR 1045 (28000)...Access denied
[roadexam@centos7 src]$ mysql -utest -p 123456 -P3306 -h192.168.48.129
Enter password:
ERROR 1045 (28000): Access denied for user ''test''@''192.168.48.129'' (using password: NO)
[roadexam@centos7 src]$ mysql -utest -P123456 -P3306 -h192.168.48.129
ERROR 1045 (28000): Access denied for user ''test''@''192.168.48.129'' (using password: NO)
[roadexam@centos7 src]$ mysql -utest -p1234567 -P3306 -h192.168.48.129
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ''test''@''192.168.48.129'' (using password: YES)
7)端口号不对 ERROR 2003 (HY000):Can''t connect to MySQL...(111)
[roadexam@centos7 src]$ mysql -utest -p123456 -P3307 -h192.168.48.129
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can''t connect to MySQL server on ''192.168.48.129'' (111)
8)连接数据库的地址不对 ERROR 2003 (HY000): Can''t connect to MySQL...(113)
[roadexam@centos7 src]$ mysql -u test -p123456 -P 3306 -h 192.168.48.121
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can''t connect to MySQL server on ''192.168.48.121'' (113)
9)地址中包含端口号信息 ERROR 2005 (HY000): Unknown MySQL...(0)
[roadexam@centos7 src]$ mysql -u test -p123456 -P 3306 -h 192.168.48.129:3306
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2005 (HY000): Unknown MySQL server host ''192.168.48.129:3306'' (0)
Linux下 快速安装mysql数据库(附mysql下载路径)
linux版本:CentOS7 64位
下载
版本: mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz
下载路径: http://pan.baidu.com/s/1kUEs5nh 密码: q4gc
安装
linux命令准备: 先执行命令
# 安装依赖 yum -y install perl perl-devel autoconf
1、下载安装包“mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz”
2、把下载的安装包移动到/usr/local/下。
3、解压
tar zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
4、复制解压后的mysql目录到系统的本地软件目录
cp mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/mysql -r
5、添加系统mysql组和mysql用户
groupadd mysql useradd -r -g mysql -s /bin/false mysql
注意:Because the user is required only for ownership purposes, not login purposes, the useradd command uses the -r and -s /bin/false options to create a user that does not have login permissions to your server host. Omit these options if your useradd does not support them.
6、进入安装mysql软件目录,修改目录拥有者为mysql用户
cd mysql/ chown -R mysql:mysql ./
7、安装数据库,此处可能出现错误。
./scripts/mysql_install_db --user=mysql
FATAL ERROR: please install the following Perl modules before executing scripts/mysql_install_db:
Data::Dumper
#解决方法: yum install -y perl-Data-Dumper
8、修改当前目录拥有者为root用户
chown -R root:root ./
9、修改当前data目录拥有者为mysql用户
chown -R mysql:mysql data
============== 到此数据库安装完毕 =============
配置
10、添加mysql服务开机自启动
添加开机启动,把启动脚本放到开机初始化目录。
cp support-files/mysql.server /etc/init.d/mysql # 赋予可执行权限 chmod +x /etc/init.d/mysql # 添加服务 chkconfig --add mysql # 显示服务列表 chkconfig --list
如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则执行
chkconfig --level 345 mysql on
11、启动mysql服务
#创建缺少的文件夹 mkdir /var/log/mariadb service mysql start
正常提示信息:Starting MySQL. SUCCESS!
12、把mysql客户端放到默认路径
ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql
=================== 这是分割线 ==================
通过使用 mysql -uroot -p 连接数据库(默认数据库的root用户没有密码,直接enter,后面会讲到设置新密码)。
如果提示错误:
错误信息:ERROR 2002 (HY000): Can''t connect to local MySQL server through socket ''/tmp/mysql.sock'' (2)
解决方法:打开/etc/my.cnf,看看里面配置的socket位置是什么目录。“socket=/var/lib/mysql/mysql.sock”
路径和“/tmp/mysql.sock”不一致。建立一个软连接:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
到这里任务算是完成了。之后就可以创建数据库用户,然后使用数据库了。
###################### 分割线 ######################
1.修改密码
方法一:
在mysql系统外,使用mysqladmin
# mysqladmin -u root -p password "root"
Enter password: 【输入原来的密码】
方法二:
通过登录mysql系统,
# mysql -uroot -p
Enter password: 【输入原来的密码】
mysql>use mysql;
mysql> update user set password=passworD("test") where user=''root'';
mysql> flush privileges;
mysql> exit;
###################### 分割线 ######################
权限控制
1、去除匿名用户
# 测试匿名用户登录 mysql -ux3
可以看到匿名用户可以登录,具有information_schema和test库的相关权限。
# 删除匿名用户,使用root用户登录数据库 delete from mysql.user where User=''''; flush privileges;
再次测试匿名用户登录
原文转载至:http://www.cnblogs.com/xxoome/p/5864912.html
亲测有效
###################### 分割线 ######################
开启mysql远程连接端口
以下配置进适用于阿里云linux服务器
阿里云linux服务器打开mysql远程连接数据库步骤
默认情况安装了mysql是无法访问的, 必须添加规则;才可以通过本地navicat 连接服务器数据库;
1.开启 3306安全组规则 (0.0.0.0/0允许任何主机访问)
2. 修改msyql远程连接权限
连连试试,还连不上,那么就要开启%匹配权限了
ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL server
说明所连接的用户帐号没有远程连接的权限,只能在本机(localhost)登录。
需更改 MySQL 数据库里的 user表里的 host项
把localhost改称%
具体步骤:登陆到MySQL
首先 use MySQL;
按照别人提供的方式update的时候,出现错误。
MySQL> update user set host=''%'' where user = ''root'';
ERROR 1062 (23000): Duplicate entry ''%-root'' for key ''PRIMARY''
然后查看了下数据库的host信息如下:
注意: 有执行错误提示不用管, 重新执行查询语句,能查询到%记录即可
MySQL> select host from user where user = ''root'';
+-----------------------+
| host |
+-----------------------+
| % |
| 127.0.0.1 |
| localhost.localdomain |
+-----------------------+
3 rows in set (0.00 sec)
host已经有了%这个值,所以直接运行命令:
执行:
MySQL>flush privileges;
再用navicat 连接...成功!!
我们今天的关于linux下C++访问mysql数据库和2的分享已经告一段落,感谢您的关注,如果您想了解更多关于C#访问MySQL数据库(winform+EF)、linux(ubuntu)下C++访问mysql数据库、Linux上通过MySQL命令访问MySQL数据库时常见问题汇总、Linux下 快速安装mysql数据库(附mysql下载路径)的相关信息,请在本站查询。
本文标签: