mysql数据库开发环境_MacOS下搭载开发环境之数据库篇(Mysql + Navicat)
一、安裝Mysql
1、官網(wǎng)下載mysql的tar包(提示:建議vpn環(huán)境下載)
2、解壓并安裝tar包
# 移動解壓后的二進制包到安裝目錄
sudo mv mysql-5.7.19-osx10.9-x86_64 /usr/local/mysql
# 更改 mysql 安裝目錄所屬用戶與用戶組
cd /usr/local
sudo chown -R root:wheel mysql
# 初始化數(shù)據(jù)庫cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql (提示:初始化數(shù)據(jù)庫時會隨機生成root@localhost用戶的隨機密碼,用此密碼登陸數(shù)據(jù)庫)
# 開啟mysql服務(wù)端程序# 啟動sudo support-files/mysql.server start# 重啟sudo support-files/mysql.server restart
# 停止
sudo support-files/mysql.server stop
# 檢查 MySQL服務(wù)端 運行狀態(tài)
sudo support-files/mysql.server status
# 通過自帶的Mysql Client 連接數(shù)據(jù)庫cd /usr/local/mysql/bin./mysql -u root -p
# 修改root@localhost用戶的密碼mysql> alter user?'root'@'localhost' identified?by?'new-password';# 將root用戶的host改為通配符%,并刷新權(quán)限,使root@127.0.0.1等也可以登錄
mysql> update user set user.Host = '%' where user.User = 'root';
mysql> flush privileges;
3、將mysql的字符集設(shè)置為utf8
# 更改 mysql 的啟動配置文件sudo vi /etc/my.cnf
[client]
port = 3306
default-character-set = utf8
[mysqld]
user = mysql
port = 3306
default-storage-engine = Innodb
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET NAMES utf8'
# 重啟mysqld后,進入mysql,查看字符集
mysql> show variables like "%character%";
二、安裝Navicat
參考教程:
ps : 一定要下載該教程提供的12.0.22安裝包,官網(wǎng)下載地址提供的安裝包bug已經(jīng)被修復(fù),包內(nèi)容中沒有rpk文件,無法修改公鑰
三、將遠(yuǎn)程IP下數(shù)據(jù)庫的內(nèi)容(包括結(jié)構(gòu)和數(shù)據(jù))復(fù)制到本地數(shù)據(jù)庫完成數(shù)據(jù)庫環(huán)境的搭建
使用mysql-cp-tool工具程序復(fù)制數(shù)據(jù),這種方法比在Navicat中導(dǎo)出數(shù)據(jù)再在本地數(shù)據(jù)庫中通過sql腳本導(dǎo)入數(shù)據(jù)要來得方便,因為導(dǎo)出數(shù)據(jù)成sql腳本時要將選中數(shù)據(jù)庫中所有數(shù)據(jù)一起導(dǎo)出,而用程序復(fù)制時復(fù)制記錄的條數(shù)可配置,且在復(fù)制過程中出錯(一般是構(gòu)造表的時候)能追蹤出錯原因。
示例:
錯誤一:
構(gòu)造表時出現(xiàn)MySQLSyntaxErrorException: Invalid default value for timestamp(3).
原因:
mysql> show variables like "sql_mode";
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
NO_ZERO_DATE:在非嚴(yán)格模式下,可以插入形如“0000-00-00 00:00:00”的非法日期,MySQL數(shù)據(jù)庫僅拋出一個警告。而啟用該選項后,MySQL數(shù)據(jù)庫不允許插入零日期,插入零日期會拋出錯誤而非警告。
解決方案:
mysql> set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> commit;
錯誤二:
拷貝數(shù)據(jù)時出現(xiàn)java.sql.SQLException: Cannot convert value '2018-10-08 22:42:03.973' from column 103 to TIMESTAMP.
Caused by: java.lang.IllegalArgumentException: nanos > 999999999 or < 0
原因:
項目中使用的MySQL JDBC driver版本過低,無法對該類型string串進行處理。
解決方案:
若是低版本的driver,例如mysql-connector-java-5.1.10-bin, 切換為高版本驅(qū)動包例如mysql-connector-java-8.0.15.jar之后就能解決問題。
四、運行程序時出現(xiàn)SQLException
錯誤一:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'column1' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'column1' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'column1' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因:ONLY_FULL_GROUP_BY的意思是:對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因為列不在GROUP BY從句中,也就是說查出來的列必須在group by后面出現(xiàn)否則就會報錯,或者這個字段出現(xiàn)在聚合函數(shù)里面。
解決方案:
將mysql的sql_mode中的ONLY_FULL_GROUP_BY設(shè)置去除。
mysql> set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> commit;
總結(jié)
以上是生活随笔為你收集整理的mysql数据库开发环境_MacOS下搭载开发环境之数据库篇(Mysql + Navicat)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: axure html 360安装扩展,小
- 下一篇: linux cmake编译源码,linu