目次:
mysqlがあることを確認します:rpm -qa | grep mysql
公式ウェブサイト[https://dev.mysql.com/downloads/repo/yum/](https://dev.mysql.com/downloads/repo/yum/)でrpmをダウンロードし、最初のものをダウンロードすることに注意してください:
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
ローカルにダウンロードした後、yumのインストールを開始します。
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum install mysql-server
mysqlを起動します(管理者権限を持つユーザーのみがmysqlを起動できることに注意してください)。
sudo systemctl start mysqld
同様に、mysqlの停止は、管理者権限でのみ停止できます。
sudo service stop mysqld
mysqlの実行ステータスを表示します。
systemctl status mysqld
mysqlのインストールを確認します。
mysqladmin --version
mysqlを開きます。mysqlを入力すると、ここにいくつかの問題があります。
ERROR 1045(28000): Access denied for user 'fangying'@'localhost'(using password: NO)
解決:
パスワードを見つける:
cat /var/log/mysqld.log | grep password
次に、このパスワードを使用してログインします:(localhostの場合は-hを省略でき、残りのipは省略できません)
/usr/bin/mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 11
Server version:8.0.11
表を表示する前に、パスワードをリセットするように求められます。
mysql> show databases;
ERROR 1820(HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by 'your password';
Query OK,0 rows affected(0.04 sec)
この時点で、表現を再度表示するだけで十分です。
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows inset(0.00 sec)
Python2はMySQLdbモジュールを介してmysqlに接続でき、python3はpymysqlを介してmysqlに接続できます。
ここに問題があることに注意してください:mysqlのユーザー名とパスワードはmysqlクライアントに接続できます。python3が接続されると、常に次のプロンプトが表示されます。
OperationalError:(1045,"Access denied for user 'root'@'localhost' (using password: NO)")
多くの情報を検索したところ、このエラープロンプトの理由は、パスワードが入力されていないなど、パスワードが見つからなかったためであることがわかりました。この混乱により、長い間検索し、解決策を見つけることができませんでした。実際、このプロンプトは十分に明確ではありません。
python2でMySQLdbモジュールを使用してmysqlに接続するときのエラーメッセージは次のとおりです。
password' cannot be loaded:/usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory")
このエラーメッセージを使用して解決策を見つけたところ、すぐに見つかりました。mysql_native_passwordpasswordを使用してユーザーを作成します(まったく同じ問題ではありませんが、問題は実際に解決されています)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pMQiEge1ikst7S_6tlXzBOmt_4b';
grant all on *.* to 'root'@'%';
問題は、MySQL 8.0.11バージョンのデフォルトの認証方法がcaching_sha2_password(およびMySQL 5.7バージョンはmysql_native_password)であるということです。デフォルトの認証方法を変更するために(後でパスワードを作成するときに)、構成ファイル/etc/my.cnfを変更できます。
別の:
centos7 python2へのMySQLdbモジュールのインストール:
yum install MySQL-python
import MySQLdb
1 )ローカルファイルをmysqlにインポートします
ローカルファイルをmysqlにインポートするには、オンにするパラメーターlocal_infileを指定する必要があります。これを行うには、インストール中にソースコードをコンパイルし、-enable-local-infileを指定する必要があります。デフォルトでは起動しません(インストールしました)当時はそうしなかった):
. /configure --prefix=/usr/local/mysql --enable-local-infile
make install
したがって、この方法は機能しません。
コンパイル時にこれを行わず、再コンパイルしたくない場合は、データベースに接続するときに--local-infileを追加できます。
mysql -u echo -p --local-infile
現時点では、データをインポートするときに、ロードデータではなくローカルのロードデータを使用する必要があります(これによりエラーが発生します)。
load data local infile '/home/fangying/GAna/aod_csv/aod_all_2015_1.csv' into table example fields terminated by ',' ignore 1 lines;
または、構成ファイル/etc/my.cnfの[mysql]と[mysqld]の両方にlocal-infile = 1を追加すると、ログイン時に--local-infileを追加せずにローカルファイルをインポートできます。
null値がある場合は、null値を「\ n」に変更する必要があります。変更しない場合、数値タイプの場合はnull値が0に設定され、日付の場合はnull値が0000-00-00に設定されます。次のようにインポートすることもできます。作成:(警告を表示する場合:-show-warnings)
load data local infile '/home/fangying/GAna/aod_csv/aod_all_2015_1.csv' into table example2 fields terminated by ',' ignore 1lines(id,x,y,@vaod_value,ele,prs,tem,rhu,merra2,date_,win_avg)set aod_value=nullif(@vaod_value,'');
解決した問題1:
ローカルファイルをmysqlにインポートするときに、エラーが発生しました。
ERROR 1290(HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
このエラーの理由は、-secure-file-privパラメーターの設定です。secure_file_privパラメーターは、LOAD DATA、SELECT…OUTFILE、LOAD_FILE()が渡される指定されたディレクトリを制限するために使用されます。
この値を確認してください。
show global variables like 'secure_file_priv'
Value Variable_name
0 /var/lib/mysql-files/ secure_file_priv
したがって、このパラメーターの値を変更し、構成ファイル/etc/my.cnfを開いて、以下を追加する必要があります。
secure_file_priv=''
変数値が「」になっていることを再度確認してください
解決した問題2:
すでにローカルでデータをロードすることはできますが、jupyterでこれを行うことはできません。
これは、私のjypyterによって追加されたmysqlカーネルが、他の人がgitで直接記述したプログラムであるためです。このプログラムでは、pymysqlを使用してmysqlに接続し、一般的に使用されるパラメーター(ホスト、ユーザー、パスワード、ポート、文字セット)のみを指定できます。 、他のパラメータは考慮されていないため、パラメータlocal_infile = 1を追加することはできません(ソースコードを変更できます)。したがって、面倒な場合は追加しません。
pythonがmysqlに接続する場合、local-infile = 1が指定されている限り、操作中にローカルデータローカルを使用できます。したがって、問題は依然としてローカルのinfileパラメータにあります。
しかし、私が理解していないのは、ローカルクライアントでmysqlに接続するときに一度だけ--local-infileを指定したことです。後続の接続ではこのパラメーターが指定されず、ローカルデータもインポートできます。なぜですか。
2 )サーバー上のファイルをmysqlにインポートします
ロードデータを使用すると、構成ファイル(/ var / lib / mysql)およびキャッシュの場所(/ tmp)のdatadirで指定された場所にのみファイルをアップロードでき、他の場所のファイルは機能しません。
load data infile '/var/lib/mysql/a.txt' into table example fields terminated by ',' ignore 1 lines;
datadirの値を変更できますが、これは少し面倒です。
注:ここでは、キャッシュの場所について説明します。実際、ロードデータは元々、データをtmpの場所に読み取ります。
操作中に次のエラーメッセージが表示されます。
1205,' Lock wait timeout exceeded; try restarting transaction'
デッドロックを見つけて殺す:
select *from information_schema.innodb_trx
kill 22
mysqlで直接kill操作を実行します。
1 )ip 192.168。***。***のホストがcentosのmysqlサーバーにアクセスして承認することを許可するユーザーを作成します:(mysql 8では、承認前に作成する必要があります。ユーザーの承認に注意してください)
create user 'username'@'192.168.***.***' identified by 'your password';
grant all privileges on *.* to [email protected].***.***;
注:ここでユーザーを作成する意味は、ipが192.168。*。***であるホストのユーザー名userがmysqlサーバーにアクセスし、これらのアクセス許可を持つことができるということです。 ****
2 )mysqlが占有するポートをcentosで開きます。
sudo firewall-cmd --zone=public--add-port=3307/tcp --permanent
3 )Windows7コマンドラインまたはワークベンチで接続するだけです。
mysql -h 192.168.***.***-u username -p
ワークベンチでは、データベース接続データベースで問題ありません。
Recommended Posts