MySQL "Unable to connect to host [host] because access was denied." - mysql

I'm having an issue connecting remotely to my MySQL server. I know my user is setup with the '%' wildcard from any host, so I should have access to the server. I can log in locally on the MySQL server with my credentials, just not remotely.
My settings in my.cnf look like this:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#
bind-address = 128.xxx.xxx.xxx
And I'm connecting with the following params (using Coda2 GUI -- but the problem doesn't seem related to Coda2):
Server: 128.xxx.xxx.xxx
Port: 3306
Username: sadmicrowave
Password: my_mysql_password
The full error message posted is:
Unable to connect to host uslonsweb003 because access was denied.
Double-check your username and password and ensure that access from your current location is permitted.
MySQL said: Access denied for user 'sadmicrowave'#'128.xxx.xxx.xxx' (using password: YES)
I can telnet to my server using IP address and 3306 so I know the server is listening on that port...
What the heck is going on?

Did you issued the flush privileges after granting access to the wildcard user?
What happens if you add an entry with user = sadmicrowave and host = [your actual ip] (don't forget to issue the flush privileges command after adding the user) ?

Related

Connect to remote mysql server from ubuntu fails

I'm using AWS server (ubuntu) for backup my remote mysql db, using mysqldump command.
Since I changed the db password, I cannot connect anymore remotely from the machine using /etc/mysql/my.cnf configuration file.
When I'm using the command
mysql -u root -h 1.1.1.1 -p 123456
It's connects successfully, but when I'm trying to connect by using the mysql configuration file /my.cnf by typing just
mysql
I gets the error message :
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
I restarted the db server (I don't need mysql service running on aws because I connected remotely)
I don't want to connect through any socket
my.cnf file content:
[client]
port = 3306
host = 1.1.1.1
user = root
password = 123456
[mysqld]
user = mysql
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 1.1.1.1
I don't know what have changed, except from the password, I didn't change anything neither in the db itself and in the config file, so I have no idea why it stopped working.
Add in the my.cnf the line protocol=tcp
[client]
port = 3306
host = 1.1.1.1
user = root
password = 12345
protocol = tcp
That force MySQL to use TCP and not the socket connection

Can not setup external access to MySQL server

I'm trying to allow external access to MySQL server. First I changed my.cnf to this (part of my.cnf):
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
In /etc/hosts.allow I added:
mysqld: all
Also I added user 'root'#'%', but what I have is that:
I'm trying to connect from server to server using external host name:
root#******:~# mysql -h******.com -u root -p
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
But using 'localhost' all is fine:
root#******:~# mysql -hlocalhost -u root -p
MySQL Server version: 5.5.43
Ubuntu 14.10 (GNU/Linux 3.16.0-23-generic x86_64)
You should run the commands after creating user-
GRANT ALL ON dbname.* TO 'root'#'%' IDENTIFIED BY 'root';
FLUSH HOSTS;
FLUSH PRIVILEGES;
if you have already run this code then there could be fire wall problem-

Can't connect to remote mysql database server

I can't figure out why i cant access a remote MySQL server in ubuntu inside a VMware. I already have the codes, and it's successfully connecting to my localhost as well as insert, delete and update of data's. But when I make a new connection string with specified IP server address it show an error:
I can only access the files in that server through SSH and browser (192.168.56.xxx/phpmyadmin).
Here's my code for connection string.
Dim conn As New MySqlConnection
conn.ConnectionString = "Server=192.168.56.xxx;port=3306;User=root;password=mypassword;Database=prodDB_vb"
conn.Open()
MessageBox.Show("Connection to Database has been opened.")
cmd.Connection = conn
I already read a lot of forums about this. But dont understand what they are pointing to.
Also i executed the code:
GRANT ALL PRIVILEGES ON prodDB_vb TO 'root#*' IDENTIFIED BY 'my_password';
FLUSH PRIVILEGE;
The only thing i know is that i cannot find the my.cnf in the server files, but already change my my.ini in my localhost's bind ip address.
#bind-address="127.0.0.1"
3306 is listening
And i have this in my my.cnf
Why having this error?
Anyone please help.
Did you check to make sure that MySQL is actually listening on 3306? Run a netstat -tlpn and provide the results. If you don't see 3306 then its probably not.
In my.cnf you should verify that --skip-networking is commented out
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 65.55.55.2
# skip-networking
To locate your CNF file
Edited:
For example, if your MySQL server IP is 192.162.0.3 then entire block should be look like as follows:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 192.168.0.3
# skip-networking
....
..
....
bind-address : IP address to bind to.
skip-networking : Don’t listen for TCP/IP connections at all. All interaction with mysqld must be made via Unix sockets. This option is highly recommended for systems where only local requests are allowed. Since you need to allow remote connection this line should removed from file or put it in comment state.
Then we have to Restart mysql service to take change in effect:
/etc/init.d/mysql restart

MYSQL connecting from outside network

i am having trouble connecting to mysql from a outside network. If i were to connect it locally, it can be done. Assuming i'm a host, what should i do?
You need to set up port forwarding in your router on port 3306 to your local IP port 3306. You'll need to grant rights to a user to allow access from external IP.
For example:
CREATE DATABASE Test;
GRANT ALL ON Test.* TO remoteUser#'10.11.12.100' IDENTIFIED BY 'PASSWORD123';
Or all tables:
GRANT ALL PRIVILEGES ON *.* to remoteUser#10.11.12.100 IDENTIFIED BY "PASSWORD123";
If that don't work check your MySQL server settings, Example /etc/mysql/my.cnf (Debian)
Settings file:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306 - CHECK THAT PORT IS CORRECT
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 1.1.1.1 CHECK THAT IP IS CORRECT
skip-networking = DELETE OR # FRONT OF IT
Port forward your router on port 3306. This is the default port for mysql. Make sure you have the same port open on your server. Make sure your ISP (Internet Service Provider) allows traffic on this port. I would suggest using something like MySQL Workbench http://www.mysql.com/products/workbench/ to manage your database if you don't already.

mysql access denied, ssh database host

i am trying to access mysql into an remote server, and create a database there.
i am using putty to connect. the problem is that i get the "access denied" error
whatever i do:
:mysql -p
:mysql -u <username> -p
.
.
.
i still get the warning.
ERROR 1045 (28000): Access denied for user 'username'#'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'username'#'localhost' (using password: YES)
one for each occasion, when i do not enter a password, and when i do.
You are having issues with remote access to MySql. From here
Step # 1: Login over ssh
First, login over ssh to remote MySQL database server
Step # 2: Enable networking
Once connected you need edit the mysql configuration file my.cfg using text editor such as vi.
In Debian Linux file is located at /etc/mysql/my.cnf
# vi /etc/my.cnf
Step # 3: Once file open, locate line that read as [mysqld]
Make sure line skip-networking is commented (or remove line) and add following line
bind-address=YOUR-SERVER-IP
For example, if your MySQL server IP is 172.20.5.2 then entire block should be look like as follows:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 172.20.5.2
# skip-networking
....
..
....
Where
- bind-address : IP address to bind to.
- skip-networking : Don’t listen for TCP/IP connections at all. All interaction with mysqld must be made via Unix sockets. This option is highly recommended for systems where only local requests are allowed. Since you need to allow remote connection this line should removed from file or put it in comment state.
Step# 4 Save and Close the file.
Restart your mysql service to take change in effect
# /etc/init.d/mysql restart
Step # 5 Grant access to remote IP address
# mysql -u root –p mysql
Grant access to new database
If you want to add new database called foo for user bar and remote IP 162.54.10.20 then you need to type following commands at mysql> prompt:
mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar#'162.54.10.20' IDENTIFIED BY 'PASSWORD';
Grant access to existing database
Let us assume that you are always making connection from remote IP called 162.54.10.20 for database called webdb for user webadmin then you need to grant access to this IP address. At mysql> prompt type following command for existing database:
mysql> update db set Host='162.54.10.20' where Db='webdb';
mysql> update user set Host='162.54.10.20' where user='webadmin';
Step # 6: Logout of MySQL
Type exit command to logout mysql
mysql> exit
Step # 7: Test it
From remote system type command
$ mysql -u webadmin –h 172.20.5.2 –p
You can also use telnet to connect to port 3306 for testing purpose
$ telnet 172.20.5.2 3306