目錄:python
驗證是否已有mysql:rpm -qa | grep mysqlmysql
在官網 https://dev.mysql.com/downloads/repo/yum/ 下載rpm,注意下載第一個:git
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
下載到本地以後,開始yum安裝:sql
rpm -ivh mysql57-community-release-el7-9.noarch.rpm yum install mysql-server
啓動mysql(注意啓動只能有管理員權限的用戶才能夠啓動):數據庫
sudo systemctl start mysqld
同理中止mysql也只能用管理員權限才能夠中止:windows
sudo service stop mysqld
查看mysql運行狀態:centos
systemctl status mysqld
驗證mysql的安裝:緩存
mysqladmin --version
mysqladmin Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)服務器
打開mysql,這裏出現了一些問題,輸入mysql時出現:tcp
ERROR 1045 (28000): Access denied for user 'fangying'@'localhost' (using password: NO)
解決辦法:
找到密碼:
cat /var/log/mysqld.log | grep password
2018-06-12T05:16:18.752589Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: =h8p&,-IffXs
再用此密碼登陸便可:(-h是localhost時能夠省略,其他的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 in set (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_password密碼(雖然也不是徹底同樣的問題,可是的確問題獲得瞭解決)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pMQiEge1ikst7S_6tlXzBOmt_4b'; grant all on *.* to 'root'@'%';
問題在於MySQL8.0.11版本默認的認證方式是caching_sha2_password (而在MySQL5.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 而不是 load data(這樣會出錯):
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也能夠導入本地文件。
如有空值的話,須要把空值處改成‘\n’,不然對於數值型會把空值設爲0,對於日期會把空值設爲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 1 lines (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:
在本地已經能夠load data local了,可是在jupyter上還作不到這個:
這是由於我的jypyter添加的mysql kernel是直接用的git上面別人寫好的程序,在這個程序裏面鏈接mysql用的是pymysql,只能指定經常使用的參數(host、user、password、port、charset),其餘的參數都沒有考慮,因此就沒法添加local_infile=1這個參數(能夠修改源代碼),嫌麻煩就不作了。
python鏈接mysql時,只要指定了 local-infile=1 在操做時就能夠local data local了。因此問題仍是出在了 local infile 參數的問題上。
可是我比較不理解的是,我在本地客戶端鏈接mysql時只指定了一次 -- local-infile ,此後的鏈接都不指定這個參數,也是能夠導入本地數據的,爲何呢?
2)將服務器上的文件導入到mysql中
使用load data,這裏只能夠上傳配置文件中datadir中指定的位置的文件(/var/lib/mysql)和緩存位置(/tmp),其餘的位置上的文件都不行:
load data infile '/var/lib/mysql/a.txt' into table example fields terminated by ',' ignore 1 lines;
能夠修改datadir的值,有點麻煩。
注意:這裏提到了緩存位置,實際上load data原本就是把數據讀取到tmp位置中。
操做時出現如下錯誤提示:
1205, 'Lock wait timeout exceeded; try restarting transaction'
找出死鎖,殺死:
select * from information_schema.innodb_trx
kill 22
直接在mysql中執行kill操做。
1)在centos 的mysql 服務器上建立一個容許ip爲192.168.***.***的主機訪問的用戶並受權:(在mysql 8中必須先建立後受權,注意受權用戶的權限)
create user 'username'@'192.168.***.***' identified by 'your password'; grant all privileges on *.* to username@192.168.***.***;
注意:這裏建立用戶的含義是ip爲192.168.***.***的主機的username用戶能夠訪問mysql服務器,並擁有這些權限。
2)在centos 開放mysql佔用的端口:
sudo firewall-cmd --zone=public --add-port=3307/tcp --permanent
3)在windows 7命令行或者workbench鏈接便可:
mysql -h 192.168.***.*** -u username -p
在workbench中 ,database - connect database便可。