一、简单分享Ubuntu 16.04下安装MySQL的过程。
首先执行下面三条命令:
Linux下C++连MySQL数据库
sudo apt-get install mysql-server
sudo apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev
启动mysql服务器
sudo service mysql start
进入mysql数据库
sudo mysql -uroot -p"password"
输入mysql -uroot -p"password"进入不了数据库解决:
解决方案:
方法1;
步骤一:登录mysql
sudo mysql -u root -p
步骤二:查看user表:
select user, plugin from mysql.user;
结果如下:
mysql> select user, plugin from mysql.user;
+-----------+-----------------------+
| user | plugin |
+-----------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| dev | mysql_native_password |
+-----------+-----------------------+
3 rows in set (0.01 sec)
发现root的plugin并不是本地密码,因此需要修改它,但由于MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。如果修改的密码太过低级,则无法通过,报如下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
因此,如果要设置为简单密码,则需修改密码规则的配置,参考博客:https://blog.csdn.net/kuluzs/article/details/51924374
步骤三:修改mysql参数配置:
set global validate_password_policy=0;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=3;
set global validate_password_special_char_count=0;
set global validate_password_length=3;
步骤四:修改root密码
update mysql.user set authentication_string=PASSWORD('123'), plugin='mysql_native_password' where user='root';
flush privileges;
最后重启终端,就可通过mysql -u root -p 免sudo登录mysql啦!
方法2;
步骤一:停止mysql服务
sudo service mysql stop
步骤二:以安全模式启动MySQL
sudo mysqld_safe --skip-grant-tables &
//或:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,进入到这个配置文件,然后在这个配置文件中的[mysqld]这一块中加入skip-grant-tables这句话。并重启。
[mysqld]
2 #
3 # * Basic Settings
4 #
5 user = mysql
6 pid-file = /var/run/mysqld/mysqld.pid
7 socket = /var/run/mysqld/mysqld.sock
8 port = 3306
9 basedir = /usr
10 datadir = /var/lib/mysql
11 tmpdir = /tmp
12 lc-messages-dir = /usr/share/mysql
13 skip-external-locking
14 character-set-server=utf8
15 collation-server=utf8_general_ci
16 skip-grant-tables
MySQL启动之后就可以不用密码登陆了
~$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
步骤三;
update mysql.user set authentication_string=PASSWORD('123'), plugin='mysql_native_password' where user='root';
flush privileges;
步骤四:
重启服务,问题就解决了
sudo service mysql stop
sudo service mysql start
mysql -u root -p
二、通过C++连接数据库
创建一个用于练习的数据库test.进入mysql> 然后依次输入:
mysql>create database test;
mysql>use test; //切换到test数据库中
mysql> create table test(name varchar(255),num int(10) ); //创建一个叫test的表
mysql>show create table test; //显示刚才创建的表信息
mysql> select * from test; //查询test表中数据
mysql>quit
编写C++文件mysqltest.cpp:
#include <stdio.h>
#include <iostream>
#include <mysql.h>
using namespace std;
int main(int argc,char *argv[])
{
MYSQL conn;
int res;
mysql_init(&conn);
//"root":数据库管理员 "123":root密码 "test":数据库的名字
if(mysql_real_connect(&conn, "localhost","root","123","test",0,NULL,CLIENT_FOUND_ROWS))
{
cout << "connect success" << endl;
res = mysql_query(&conn, "insert into test values('user','123456')");
if(res)
{
printf("error\n");
}
else
{
printf("OK\n");
}
mysql_close(&conn);
}else
{
cout << "connect failed" << endl;
}
return 0;
}
编译程序
使用的编译代码(注意哪两个不是单引号而是反单引号)
g++ mysqltest.cpp `mysql_config --cflags --libs` -o mysqltest
运行
./mysqltest
再次查看数据库
mysql>use test;
mysql>select * from test;
这样就可以查看到插入的信息了。
三、设置mysql允许远程访问
首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1:
保存退出,然后进入mysql服务,执行授权命令:
grant all on *.* to root@'%' identified by '你的密码' with grant option;
flush privileges;
然后执行quit命令退出mysql服务,执行如下命令重启mysql:
service mysql restart
现在在Windows下可以使用navicat远程连接Ubuntu下的MySQL服务:
Ubuntu 16.04安装MySQL及问题解决 http://www.linuxidc.com/Linux/2017-05/143861.htm