원격 서버에서 Amazon EC2의 mysql에 연결
내 로컬 컴퓨터에서 EC2의 db에 연결하고 싶지만 모든 작업을 수행 할 수없고 시도했습니다.이 명령을 사용하여 EC2에 연결하고 있습니다.
mysql -uUSERNAME -hEC2_IP -pPASSWORD
이 오류가 생성되었습니다.
오류 2003 (HY000) : 'IP'(110)에서 MySQL 서버에 연결할 수 없습니다.
my.cnf를 다음과 같이 수정했습니다.
skip networking
bind-address = 0.0.0.0
여전히 데이터베이스에 연결할 수 없습니다.
다음 이유 중 하나가있을 수 있습니다.
- 머신에서 Amazon EC2 인스턴스로의 원격 액세스를 허용하려면 Amazon 보안 그룹에 항목을 만들어야합니다. :-나는 이것이 당신의 질문에서 이미 0.0.0.0으로 항목을 만든 것처럼 보이므로 모든 사람이 기계에 액세스 할 수 있다고 믿습니다.
- MySQL에서 사용자가 원격 컴퓨터에서 연결하는 것을 허용하지 않음 :-기본적으로 MySql은 관리자 액세스 권한으로 루트 사용자 ID를 만듭니다. 그러나 루트 ID의 액세스는 localhost로만 제한됩니다. 즉, 원격 컴퓨터에서 MySql에 액세스하려고하면 올바른 암호를 가진 루트 사용자 ID가 작동하지 않습니다. 이 문제를 해결하려면 루트 사용자 또는 다른 DB 사용자가 원격 시스템에서 MySQL에 액세스 할 수 있도록 허용해야합니다. 원격 컴퓨터에서 DB에 액세스하는 루트 사용자 ID를 허용하지 않는 것이 좋습니다. 와일드 카드 문자 %를 사용하여 원격 시스템을 지정할 수 있습니다.
- 컴퓨터의 로컬 방화벽이 활성화되어 있지 않은지 확인하십시오. 활성화 된 경우 포트 3306이 열려 있는지 확인합니다.
다음 링크로 이동하십시오. MySQL 데이터베이스 서버에 대한 원격 액세스를 활성화하려면 어떻게합니까?
위의 응답에서 언급했듯이 AWS 보안 그룹 및 기타 사항과 관련이있을 수 있습니다. 하지만 사용자를 생성하고 원격 액세스 '%'를 부여했지만 여전히이 오류가 발생하면 mysql 구성 파일을 확인하십시오. 데비안에서 여기에서 찾을 수 있습니다. /etc/mysql/my.cnf 다음 줄을 찾습니다.
bind-address = 127.0.0.1
다음으로 변경하십시오.
bind-address = 0.0.0.0
mysql을 다시 시작하십시오.
데비안 / 우분투에서 :
/etc/init.d/mysql restart
이것이 당신에게 효과가 있기를 바랍니다.
업데이트 : 2017 년 2 월
다음은 MySQL의 원격 액세스를위한 전체 단계 입니다 (Amazon EC2에 배포 됨).
1. 인바운드 규칙에 MySQL을 추가합니다.
당신의 EC2 인스턴스의 보안 그룹으로 이동 -> 편집 인바운드 규칙 -> 새 규칙을 추가 -> 선택 MySQL/Aurora
과에 소스 Anywhere
.
2. my.cnf에 bind-address = 0.0.0.0 추가
인스턴스 콘솔에서 :
sudo vi /etc/mysql/my.cnf
vi 편집기가 열립니다.
my.cnf 파일에서 [mysqld]
새 줄 을 추가하고 다음을 작성하십시오.
bind-address = 0.0.0.0
입력하여 파일 저장 :wq
(입력)
이제 MySQL을 다시 시작하십시오.
sudo /etc/init.d/mysqld restart
3. 원격 사용자를 생성하고 권한을 부여합니다.
MySQL에 로그인 :
mysql -u root -p mysql
(이후 비밀번호 입력)
이제 다음 명령을 작성하십시오.
CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';
CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';
GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
그런 다음 인스턴스의 공개 dns / ip를 MySQL 호스트 주소로, 사용자 이름을 jerry로, 비밀번호를 jerrypassword로 입력하여 MySQL dB에 원격으로 액세스 할 수 있습니다. (포트는 3306에서 기본값으로 설정됩니다.)
포트 3306 (MySQL의 기본 포트)에서 들어오는 요청을 수락하도록 EC2 인스턴스에 할당 된 Amazon 보안 그룹을 구성하지 않았을 수 있습니다 .
이 경우 몇 번의 버튼 클릭만으로 보안 그룹의 포트를 쉽게 열 수 있습니다.
1) AWS 콘솔에 로그인하고 'EC2'로 이동합니다.
2) '네트워크 및 보안'의 왼쪽 메뉴에서 '보안 그룹'으로 이동합니다.
3) 해당 보안 그룹 확인
4) '인바운드 탭'을 클릭하십시오.
5) 드롭 다운 목록에서 'MYSQL'을 선택하고 '규칙 추가'를 클릭합니다.
이유는 아니지만 갈만한 가치가 있습니다 ...
일부 우분투 구성의 경우이 파일에서 bind-address를 변경해야합니다.
/etc/mysql/mysql.conf.d/mysqld.cnf
이 문제를 추적하는 데 유용한 단계는 MySQL이 실제로 설정된 바인드 주소를 식별하는 것입니다. netstat로이를 수행 할 수 있습니다.
netstat -nat |grep :3306
여러 개의 mysql 구성 파일이 있고 잘못된 파일을 편집했기 때문에 이것은 내 문제에 집중하는 데 도움이되었습니다. Netstat는 mysql이 여전히 잘못된 구성을 사용하고 있음을 보여주었습니다.
ubuntu@myhost:~$ netstat -nat |grep :3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
그래서 내 설정을 재정의 할 수있는 다른 파일에 대한 구성 디렉토리를 grepped했고 다음을 찾았습니다.
ubuntu@myhost:~$ sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0
오! 이것은 내가 조정 한 설정이 잘못된 구성 파일이라는 것을 보여 주었으므로 이번에는 RIGHT 파일을 편집하고 netstat로 확인하고 업무 중이었습니다.
이 질문에 대한 답이있는 것 같지만 얻을 수있는 또 다른 일반적인 문제는 DB 사용자가 잘못 구성되었다는 것입니다. 이것은 mysql 관리 및 권한 문제입니다.
- IP로 시작된 EC2_DB
10.55.142.100
- IP로 시작된 EC2_web
10.55.142.144
- EC2_DB 및 EC2_WEB는 DB 포트 (3306)를 통해 액세스 할 수있는 동일한 보안 그룹에 있습니다.
- EC2_DB에는 DB 루트 사용자 (
'root'@'localhost'
) 가 로컬로 연결할 수있는 mysql DB가 있습니다. - EC2_DB mysql DB에는 원격 사용자가 있습니다.
'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
- EC2_WEB에서 mysql에 대한 bash 호출이 실패합니다.
mysql -umy_user -p -h ip-10-55-142-100.ec2.internal
명시 적 IP, 퍼블릭 DNS 등에 대한 호스트 참조도 마찬가지입니다.
mysql DB에 잘못된 사용자 권한이 있으므로 6 단계가 실패합니다. 다음이 필요합니다.
GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'
I would like to think that %
would work for any remote server, but I did not find this to be the case.
Please let me know if this helps you.
Change /etc/mysql/my.cnf
:
bind-address = 127.0.0.1 to 0.0.0.0
Create user with '%' host
and restart:
/etc/init.d/mysql restart
Works for me! :)
Log into AWS Management Console. Navigate to RDS then select the db instance and go to "security Groups". Adding CIDR/IP under the security group fixed the problem.
Solution to this is three steps:
Within MySQL my.ini/ my.cnf file change the bind-address to accept connection from all hosts (0.0.0.0).
Within aws console - ec2 - specific security group open your mysql port (default is 3306) to accept connections from all hosts (0.0.0.0).
Within windows firewall add the mysql port (default is 3306) to exceptions.
And this will start accepting remote connections.
- START MYSQL using admin user
- mysql -u admin-user -p (ENTER PASSWORD ON PROMPT)
- Create a new user:
- CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; (% -> anyhost)
- Grant Privileges:
- GRANT SELECT,DELETE,INSERT,UPDATE ON db_name.* TO 'newuser'@'%';
- FLUSH PRIVILEGES;
If you are running EC2 instance don't forget to add the inbound rules in security group with MYSQL/Aurura.
If these steps didn't work check /etc/mysql/my.cnf file and edit the bind_address param as
bind_address=0.0.0.0
I know this is an old post but...
I'm experiencing this issue and I've established that my problem is in fact not the EC2 instance. It seems like it might be a bug in the MySQL client driver software. I haven't done thorough research yet but I went as far as to install MySQL Workbench on the EC2 instance and IT also is erratic - it intermittently fails to connect (error is "connection cancelled"). This link suggests a possible bug lower down the stack, not EC2.
Of course, I have not done exhaustive research and my post might actually be off the mark, but worth noting and/or exploring anyway, IMHO.
I went through all the previous answers (and answers to similar questions) without success, so here is what finally worked for me. The key step was to explicitly grant privileges on the mysql server to a local user (for the server), but with my local IP appended to it (myuser@*.*.*.*
). The complete step by step solution is as follows:
Comment out the
bind_address
line in/etc/mysql/my.cnf
at the server (i.e. the EC2 Instance). I supposebind_address=0.0.0.0
would also work, but it's not needed as others have mentioned.Add a rule (as others have mentioned too) for MYSQL to the EC2 instance's security group with port 3306 and either
My IP
orAnywhere
as Source. Both work fine after following all the steps.Create a new user
myuser
with limited privileges to one particular databasemydb
(basically following the instructions in this Amazon tutorial):$EC2prompt> mysql -u root -p [...omitted output...] mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password'; mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
Here's the key step, without which my local address was refused when attempting a remote connection
(ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server)
:mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23'; mysql> FLUSH PRIVILEGES;`
(replace
'*.*.*.23'
by your local IP address)For good measure, I exited mysql to the shell and restarted the msyql server:
$EC2prompt> sudo service mysql restart
After these steps, I was able to happily connect from my computer with:
$localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p
(replace
myinstancename.amazonaws.com
by the public address of your EC2 instance)
While creating the user like 'myuser'@'localhost', the user gets limited to be connected only from localhost. Create a user only for remote access and use your remote client IP address from where you will be connecting to the MySQL server. If you can bear the risk of allowing connections from all remote hosts (usually when using dynamic IP address), you can use 'myuser'@'%'. I did this, and also removed bind_address from /etc/mysql/mysql.cnf (Ubuntu) and now it connects flawlessly.
mysql> select host,user from mysql.user;
+-----------+-----------+
| host | user |
+-----------+-----------+
| % | myuser |
| localhost | mysql.sys |
| localhost | root |
+-----------+-----------+
3 rows in set (0.00 sec)
The default ip of Mysql in instance EC2 Ubuntu is 127.0.0.1
if you want to change it is just to follow the answers that have already been given here.
참고URL : https://stackoverflow.com/questions/9766014/connect-to-mysql-on-amazon-ec2-from-a-remote-server
'Program Tip' 카테고리의 다른 글
AppCompatActivity 기호를 해결할 수 없음-지원 v7 라이브러리가 인식되지 않습니까? (0) | 2020.12.09 |
---|---|
AVAudioPlayer가 소리를 재생하지 않음 (0) | 2020.12.09 |
충돌 후 Eclipse가 시작되지 않음 (0) | 2020.12.09 |
아이콘 만있는 Tablayout (0) | 2020.12.09 |
모든 핑 결과에 타임 스탬프를 찍는 방법은 무엇입니까? (0) | 2020.12.09 |