使用第一步,连接成功。
以下内容:1、C#代码,2、MariaDB安装,3、问题集锦
本地Windows7,VS2008,VS2017,mysql 5.7.20
远程(虚拟机)Windows server 2008 ,Linux(CentOS-7)MariaDB 5.5.60
VS2008的程序连接本地mysql,在server 2008运行连接本地mysql都能成功。
连接Centos MariaDB就出错,不断尝试,已解决。只是权限问题,/笑哭。
1、VS2008(VS2017)新建C#控制台程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
namespace MySqlConn
{
class Program
{
static void Main(string[] args)
{
try
{
string constr = "server=192.168.43.92;port=3306;User Id=znj;password=znj;Database=mysql";
Console.WriteLine(constr);
MySqlConnection mycon = new MySqlConnection(constr);
mycon.Open();
Console.WriteLine("连接数据库成功!");
mycon.Close();
}
catch (Exception ex)
{
Console.WriteLine("异常:");
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
}
}
引用MySql.Data.dll
项目--添加引用
.NET--MySql.Data.dll --确定
执行
2、Centos-7 安装MariaDB
安装命令
# yum -y install mariadb mariadb-server
安装完成MariaDB,首先启动MariaDB
# systemctl start mariadb
设置开机启动
# systemctl enable mariadb
接下来进行MariaDB的相关简单配置
# mysql_secure_installation
首先是设置密码,会提示先输入密码
Enter current password for root (enter for none):<–初次运行直接回车
设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
初始化MariaDB完成,接下来测试登录
# mysql -uroot -ppassword <– password是刚设置的密码
完成。
3、问题集锦
B、MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts.
在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
在 MySql.Data.MySqlClient.MySqlPool.GetConnection()
在 MySql.Data.MySqlClient.MySqlConnection.Open()
---------->IP或端口不通。ping IP或telnet端口测试。
Centos-7开启端口
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
Centos-7重启防火墙
# firewall-cmd --reload
C、server=10.0.0.123;uid=znj;pwd=znj;database=mysql
获取缓存DB成功:
加入DB缓存成功
异常:
MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed. ---> System.IO.IOException: 无法从传输连接中读取数据: 无法立即完成一个非阻止性套接字操作。。 ---> System.Net.Sockets.SocketException: 无法立即完成一个非阻止性套接字操作。
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- 内部异常堆栈跟踪的结尾 ---
在 MySql.Data.Common.MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
在 MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
在 System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
在 MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
在 MySql.Data.MySqlClient.MySqlStream.LoadPacket()
--- 内部异常堆栈跟踪的结尾 ---
在 MySql.Data.MySqlClient.MySqlStream.LoadPacket()
在 MySql.Data.MySqlClient.MySqlStream.ReadPacket()
在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
在 MySql.Data.MySqlClient.MySqlPool.GetConnection()
在 MySql.Data.MySqlClient.MySqlConnection.Open()
---------->IP端口不对。
D、MySql.Data.MySqlClient.MySqlException: Host 'znj_pc' is not allowed to connect to this MariaDB server
在 MySql.Data.MySqlClient.MySqlStream.ReadPacket()
在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
在 MySql.Data.MySqlClient.MySqlPool.GetConnection()
在 MySql.Data.MySqlClient.MySqlConnection.Open()
---------->不允许客户端的IP访问。
-- 选择mysql数据库
> use mysql;
-- 查看用户信息
> select host, user, password from user; --5.7版本下的mysql数据库下已经没有password这个字段,改成了authentication_string
-- 创建远程用户
-- 从192.168.43.238登陆的用户
> create user 'znj'@'192.168.43.238' identified by 'znj';
-- 从任意ip登陆的用户
> create user 'znj'@'%' identified by 'znj';
-- 不做指定默认为'%'
> create user 'znj' identified by 'znj';
或
> update user set host='%' where user='znj' and host='127.0.0.1'; --根据实际
> flush privileges; --刷新
E、MySql.Data.MySqlClient.MySqlException: Authentication to host '192.168.43.92' for user 'znj' using method 'mysql_native_password' failed with message: Access denied for user 'znj'@'%' to database 'mysql' ---> MySql.Data.MySqlClient.MySqlException: Access denied for user 'znj'@'%' to database 'mysql'
在 MySql.Data.MySqlClient.MySqlStream.ReadPacket()
在 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
--- 内部异常堆栈跟踪的结尾 ---
在 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.AuthenticationFailed(Exception ex)
在 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
在 MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset)
在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
在 MySql.Data.MySqlClient.MySqlPool.GetConnection()
在 MySql.Data.MySqlClient.MySqlConnection.Open()
---------->此用户无权限使用此IP连接操作。
为用户授权,运行远程登录,并具有数据库操作权限
-- 赋予部分权限,其中的mysql.*表示对数据仓库mysql的所有操作。
> grant select,delete,update,insert on mysql.* to 'znj'@'%' identified by 'znj';
> flush privileges;
-- 赋予所有权限
> grant all privileges on mysql.* to 'znj'@'%' identified by 'znj';
> flush privileges;
完。