How mariadb resolves user's hostname? - mysql

I am using MariaDB on Linux RedHat and running Java App. I am interested in how DB resolves user hostname because I want to use user#localhost instead of user#127.0.0.1.

The name resolution in Linux is done in the resolver library. The main functions are gethostbyname() and gethostbyaddr(). In the /etc/nsswitch.conf file you can change the search order. You can use the following options:
dns
Use the Domain Name System (DNS) service to resolve the address. This mechanism uses the /etc/resolv.conf file.
files
Search in the /etc/hosts and /etc/network files.
nis or nisplus
Use the Network Information System (NIS) to resolve the host or network address.
In oyur case, is almost the same. The relation between 127.0.0.1 and localhost is defined in /etc/hosts

Related

I am not able to connect to mysql server running on Google Compute engine from another instance using internal IP

I located the /etc/mysql/my.cnf file
I changed the bind-address
first to 0.0.0.0 I received a '111 Connection refused'
then I changed it to the instance I am trying to connect to It still says '111 Connection refused'
the firewall rule allows connection on port 3306 using internal ip so I dont know the problem. Thanks
It seems that you have already taken the necessary steps to connect to MySQL server from GCE your instance. Based on the Stackoverflow case here the recommendation to resolve this problem is to comment this line below (add # at the beginning of the line) in your my.cnf file:
skip-networking
Once done you need to restart MySQL service
sudo service mysql restart
On the GCP side, if you have allowed the IP ranges you want to use with the specified port(3306), it should work fine.
You can also use “nmap” command to verify if port 3306 is open on your GCE instance with MySQL installed.
GCP provides CloudSQL which is a managed MySQL instance. You can access CloudSQL from your GCE VM using private address. This feature reached beta recently. This link provides detailed information about using private IP to connect to your Cloud SQL instances.
Before configuring a Cloud SQL instance to use private IP, you need some steps to be taken. This document provides step by step instructions for configuring an instance to use private IP.
You can use 'netstat -tunlp | grep 3306' command to verify that the MYSQL process is running on port 3306.
This error can also occur when mysql user account does not accept connections from any IP addresses. It may still use localhost parameter to connect to the server. I would recommend adding a user with remote access or granting existing user access to remote sources. You can see this: link for the similar issue and follow the steps recommended there to resolve.

Finding Hostname of MySQL installed on AWS

I am not able to figure out hostname of my MySQL database which is installed on AWS T2 micro server.
I can connect via phpmyadmin. And connecting via PHP code as localhost works ok too.
However can't find hostname or ip which is needed to connect it from service hosted on other server (where localhost won't be an option)
Tried running following
SELECT variable_value FROM global_variables WHERE variable_name = 'hostname'
However the output is ip-172-31-23-11. This doesn't work as hostname when I try to connect.
The output from SELECT variable_value FROM global_variables WHERE variable_name = 'hostname' is showing you the non fully qualified private DNS name.
This should be fine to connect to this instance from the same VPC but if you need to connect from outside of the VPC then instead you should use the public DNS. This, as with the private DNS, is shown in the EC2 dashboard under the instance details (and elsewhere).
As an example:
You then also need to consider network controls such as VPC ACLs and Security Groups. Make sure the security group of your instance allows access from the originating IP over 3306 (default MySQL port).
You'll also want to check the bind-address in /etc/my.cnf to either allow connections specifically from certain addresses as well as localhost/127.0.0.1 or simply remove or comment out the line to allow MySQL to listen to all incoming traffic.
If the application you're trying to connect to the DB with lives on another server, you'll need to get either the public DNS, public IP address, or create an entry in DNS (Route53) that points "database.example.com" into your public IP/DNS name. You can then use one of those as the connection string within the app.
depending on settings, you may also have to follow some of the instructions here.
you might need to bind mysql to listen on the hosts network interface in order to get outside connectivity.
I suggest using telnet to figure that out. if you can't connect (via the command: "telnet 54.4.54.4 5432" (where 54.4.54.4 is your public ip/DNS/route53 entered hostname) then you need to check your security group as well and make sure port 5432 is open to connections from where you're trying to telnet from.

mysql host on internet using hp cloud and xeround

I am new to the 'cloud' concept I have a Java based application for data entry which runs well on my LAN.
On my LAN I install:
MySql
Configure Instance ( user name - root, pass - ******)
Dump dummy database entry_db that is in raw format
Then I have a jar executable file which when runs, displays a login screen.
I manage to successfully log in using predefined ID and PASSWORD (user - config pass - ******)
After logging in I configure(d):
Database Type
Database IP
User Name (Root)
Password ****
Database Name ( It auto selects database named entry_db)
In another window I configure(d) Network File Sharing Location:
file shared location
image path
back up data path
config file location in xml
(Note - When I select file shared location, all other files take the same path automatically)
Then I create Admin account rather than Supervisor account or operator account and login with the Admin account and I can now upload data and distribute to all operators.
Here is my problem:
I configure a cloud computer on Hp Cloud (they provide me a static ip) and then import database from xeround.com.
I now have a dns and port number and also a log in form using MY PHP CLIENT
How can I package all this to the same executable jar file to be used from anywhere?
How can I use it just like on my LAN from the web?
What is the optimal configuration for this?
I work in Xeround.
I have read your question and I wanted to point out a couple of things; you should use the DNS in the connection string where you used to put hostname/IP of the MYSQL server machine and the port number where you used to put the MySQL default port (3306).
 
Other than that you can connect from anywhere there is access to the instance. I suggest that if your jar runs in the HP cloud you create your Xeround database instance there as well (this will yield improved performance).
 
If you still need help, we will be more than happy to help you. Just send us a quick email to support#xeround.com and we'll take it from there.
Cheers,
Yuval

Connecting to MySQL from other machines

I have MySQL installed on a Windows 2003 server on our domain. I cannot connect to it from other machines on the domain. I open up the MySQL Administrator panel and try to change the server name from localhost to the machine name it does not recognize it. I have tried fully qualifying the name also. Any ideas what I need to change?
What sort of error, a total inability to connect? Windows Firewall is the first place I'd look, to make sure port 3306 is open.
have you double checked permissions on the databases using something like
grant all priviliges on 'database'.'*' to 'username'#'remote_machine_ip' identified by 'password';
Like Sukasa mentioned, also double check any firewalls you may have configured
You need to look in the my.cnf file and look for the bind-address setting and the skip-networking setting. You want the latter removed or commented out and the former to be the machine's IP address. Restart MySQL after you make changes.
A number of MySQL install packages defaulted to a local socket only install, which is helpful for security but considerably impairs network connectivity. :-)
I was trying to connect to the database using the default root userid. I created a new user and gave this user read permission to the needed tables.

My apps can't connect to mysql, can you suggest things to test?

I'm on a mac server. From my home directory, I can get to mysql on the command line. But apps I install (I've tried phpMyAdmin and then Wordpress) can't connect to mysql#localhost.
Suggestions on troubleshooting the problem?
Also, how can I tell what port mysql is running on?
Try specifying 127.0.0.1:3306 as the host and see if that works...
Edit from comments:
Use netstat -a to check which
port MySQL is listening on.
Check to make sure you have the mysql extension installed.
More information: http://us2.php.net/mysql
Make sure you have explicitly listed localhost when you granted permissions to the user. For example, if you have a database named blog which is accessed by a user named wordpress, you need to create the user with this:
grant all on blog.* to 'wordpress'#'localhost' identified by 'blahblah';
I believe that the mysql command-line utility uses Unix file sockets to connect, which bypasses any hostname or DNS restrictions.