C#(远程)连接mysql,CentOS-7安装MariaDB,及连接问题

使用第一步,连接成功。

以下内容: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、问题集锦

A、centos7 ifconfig yum 无效

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;

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值