MySQL-Nodejsリモート接続の概要



プロジェクトの進行中に、ローカル・データベースMySQLに外部からアクセスできる必要があります.2日間の努力を経て、やっと外部に接続することに成功し、忘れる前に整理しました.そして早めに皆さんにウィンドウイング11で行われたことをお伝えします

CMDからMySQLに接続

mysql -u 유저명 -p
cmdウィンドウでもmysqlにアクセスできます.ユーザー名とパスワードは通常mysqlのインストール時に設定されます.プレイヤー名が変更されていない場合は、デフォルトはrootです.mysqlコマンドは食べないで環境変数を設定します.

環境変数の設定

  • 「マイコンピュータ」を右クリックしてパスを変更しない場合は、C:\\Program Files\\MySQL\\MySQL Server 8.0\\binを追加するだけです.
  • cmdウィンドウを閉じて、再度開きます.
  • MySQLに接続します.正常に接続されている場合、入力行の前半はmysql>になります.
  • 常用命令

    // 사용할 수 있는 데이터베이스 확인
    show databases;
    // 데이터베이스 선택
    // mysql 데이터베이스에서는 db의 관련정보를 확인할 수 있다.
    use mysql;
    // 사용자 목록 보기 (사용자명, 호스트, 플러그인, 비밀번호 순)
    select user, host, plugin, authentication_string from user;
    // 사용자 생성
    create user '사용자명'@'접근할ip' identified by '비밀번호';
    // 권한 설정
    grant 부여할권한 on '데이터베이스'.'테이블' to '사용자명'@'접근할ip';
    // 변경사항 적용
    flush privileges;
    // mysql 종료
    exit   // or quit

    外部接続を許可するユーザーの作成


    MySQLではインストール時に外部接続は基本的に許可されていないため、外部接続を許可するユーザーを直接作成する必要があります.
    CREATE USER '유저명'@'%' IDENTIFIED BY '비밀번호';
    @の後、mysqlに接続できるipiを設定できます.これをホストと呼びます.
  • %:
  • localhost:
  • へのローカルアクセスを許可
  • 特定のIP:特定のIPにアクセスする必要があります.
    生成されたユーザーを許可します.
  • // GRANT [부여할 권한] ON '데이터베이스명'.'테이블명' TO '유저명'@'접속호스트';
    GRANT ALL ON *.* TO '유저명'@'%';
    プリファレンスパラメータを変更する場合は、次のコマンドを入力する必要があります.あるいは適用されません!
    FLUSH PRIVILEGES;
    現在使用されているMySQLキャッシュをクリアし、新しい設定を適用します.このコマンドを使用するユーザーには、再ロード権限が必要です.
    つまり、MySQLの優先パラメータを変更した場合は、MySQLの変更を再起動していない設定部分を適用する場合に使用します.

    サーバ外部接続の設定


    外部ユーザーが私のパソコンのローカルデータベースにアクセスするには、まずファイアウォールを開く必要があります.
    検索中iniファイル(macの場合my.cnf)のbind address部分に注釈を付けるべきで、mysql 8.0から設定する必要はありません.

    ファイアウォールを開く

  • コントロールパネルのWindows Defenderファイアウォールに入ります(ウィンドウでファイアウォールを検索すればいいです).次に、[詳細設定]をクリックします.
  • インバウンド・ルールをクリックし、右側で新しいルールをクリックします.
  • 番组が选ばれ、次の番组に入る.
  • [参照]ボタンをクリックし、MySQLがインストールしたフォルダを参照し、mysqldを取得します.「exe」を選択します.インストール時にパスが変更されていない場合は、「C:Program FilesMySQL Server 8.0binmysqld.exe」にある可能性があります.
  • [接続を許可]が選択されていることを確認し、[次へ]ボタンを押します.
  • は、このルールをどのネットワークに適用するかを選択することができる.
  • 適当な名前を付けて、「完了」を押して終了します.

    ルータDDNS(オプション)とポート転送設定


    ローカルPCがルータに接続されている場合、DDNSを設定できます.DDNSは、動的IPを固定IPとして利用できるサービスであり、DDNS設定によりテストされる.iptime.orgというドメインを登録している場合は、IPが変更されてもテストできます.iptime.orgを入力すると、変更したIPで接続できます.DDNS設定とポート転送方法について説明します.
    参考として、DDNSに登録されているIPアドレスは、https://ip.pe.kr/の公認IPである.Nodejsでは、Mysql接続部のホストにもこの共通IPが含まれているはずです.
    ルータDDNS設定
    iptimeルータを基準に説明します.
    1.http://192.168.0.1アドレスに登録して管理ツールをクリックします.

    2.ファームウェアの最新バージョンの検証
    左側の詳細設定-システム管理-ファームウェアのアップグレードで、ファームウェアのバージョンを確認し、最新バージョンにアップグレードされていることを確認します.DDNSを設定すると、ファームウェアのバージョンがサポートされていないか登録されていないため、接続が中断する可能性があります.

    3.DDNS設定
    詳細設定-特殊機能-DDNS設定に入り、以下の空白を記入すればよい.
  • ホスト名:適切なドメイン名を入力します.
  • ユーザーID:実際にメールを受信できる電子メールを作成します.
    DDNSを登録した後、「正常に更新(登録)」した場合、登録は成功します.
  • ポート転送設定
    MySQLのポートは3306で、外部ポートと内部ポートを設定すればよい.

    内部IPはcmdにipconfigを入力し、「無線LANアダプタWi-FiのIPv 4アドレス」の値を入力するだけです.
    その後、MySQLへのリモート接続を試みることができます.端末を使って接続できるかどうかをテストします.DDNS設定が面倒な場合は、ホスト部分にパブリックIPを代入することができます.
    // 형식 : mysql -u 유저명 -h 접근할DB호스트 -p
    mysql -u 유저명 -h test.iptime.org -p
    or
    mysql -u 유저명 -h 공인IP -p

    Nodejsの設定


    以上の手順により、外部からローカルDBに正常に接続された場合、NodejsにDBを接続するための変数を登録することもできます.envファイルに以下の内容を記入し、接続DBの部分にこれらの値をロードすればよい.
    SERVER_PORT = 3000
    DB_HOST = 공인IP or DDNS 도메인
    DB_PORT = 3306
    DB_DB = 사용할 데이터베이스의 이름
    DB_USER = 유저명
    DB_PASSWD = 해당유저의 비밀번호
    sequelizeを使ったのでconfigjsから値段を呼んだ.

    発生したエラー


    プロトコル関連エラー


    ‘Client does not support authentication protocol requested by server; …’
    この問題は、クライアントプログラムでmysqlパスワードプラグイン「caching sha 2 password」を使用できないため発生したエラーです.このプレイヤーのパスワードカードを交換すればいいだけです.
    mysql > ALTER USER '사용자명'@'%' IDENTIFIED WITH mysql_native_password BY 'Xptmxm1212!@';
    mysql > FLUSH PRIVILEGES;
    に表示されます.
    mysql > SELECT user, host, plugin FROM user;

    パスワードエラー


    (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
    mysqlが正しいパスワードを入力しても、上記のエラーが発生する可能性があります.そのエラーは2つのケースで確認できます.
    1.パスワード入力エラー
    2.パスワードを設定したプラグインはmysqlパスワードプラグインと一致せず、認識できない.
    1の場合は、パスワードを再入力するか、次のコマンドでパスワードを変更できます.
    // 버전에 따라 password가 authentication_string으로 되어있다.
    select host, user, authentication_string from user;
    // 비밀번호 정책 확인 후 비밀번호를 등록할 수도 있다.
    show variable like 'validate_password%';
    // 비밀번호 변경
    // 필드명이 password인 경우 password=password('비밀번호')로 바꿔서 작성한다.
    update user set authentication_string=password('비밀번호') where user='유저명';
    // 변경사항 적용
    flush privileges;
    2つ目の場合、パスワードが登録されているプラグインを交換して再登録する必要があります.既存のパスワードをそのまま入力したり、新しいパスワードに変更したりすることができます.