介紹
介紹
如果編寫一個小工具、小遊戲,可以直接寫程式碼,它不涉及儲存資料的操作,不過如果要編寫一個網路工具、系統平臺、網路遊戲就需要將大量的資料儲存起來。
早期儲存資料都是使用檔案儲存,不過使用檔案作為儲存媒介是非常有侷限性了。首先檔案是獨立的,很難進行統計操作;其次檔案依賴IO控制代碼,頻繁的進行開啟檔案、關閉檔案,會對系統資源造成影響。
這時候資料庫(Database)就應運而生了,它可以最大限度的解決儲存和讀取的問題,依賴公共的SQL語法標準,可以快速、靈活的對資料庫引擎進行資料儲存和資料讀取。
MySQL是一款開源的、免費的、功能強大的資料庫引擎,今天就跟著福哥來學習如何在我們的TFLinux作業系統上面安裝MySQL資料庫引擎吧。
基本資訊安裝環境
CentOS:CentOS Linux release 7.6.1810 (Core)Linux:Linux version 3.10.0-1062.el7.x86_64GCC:gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
軟體版本
mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
準備工作本地化
如果是新環境,我們需要設定時區以保證時間顯示正確
timedatectl set-timezone Asia/Shanghai
安裝wget
如果環境裡沒有wget,透過yum安裝一下
yum -y install wget
安裝依賴包
yum -y install libaio numactl-libs
建立環境根目錄
mkdir -p /tongfu.net/env/
建立安裝包目錄並進入
mkdir /packagescd /packages
安裝MySQL 5.7準備
mysql-5.7.28-linux-glibc2.12-x86_64.tar.g
下載安裝包
下載mysql-5.7.28安裝包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
建立賬號
需要建立一個使用者mysql
useradd mysql
安裝mysql
我們下載的是編譯好的二進位制版本,直接解壓縮即可使用
tar -xzvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /tongfu.net/env/cd /tongfu.net/env/mv mysql-5.7.28-linux-glibc2.12-x86_64/ mysql-5.7.28
初始化
使用mysqld進行初始化
mkdir mysql-5.7.28/data/chown -R mysql.mysql mysql-5.7.28/./mysql-5.7.28/bin/mysqld --initialize --user=mysql --basedir=/tongfu.net/env/mysql-5.7.28/ --datadir=/tongfu.net/env/mysql-5.7.28/data/
注意:執行完上面的命令後,會有初始化密碼打印出來,一定記得儲存起來
2020-01-07T03:41:01.823712Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2020-01-07T03:41:03.374189Z 0 [Warning] InnoDB: New log files created, LSN=457902020-01-07T03:41:03.775803Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.2020-01-07T03:41:03.952070Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 87b0b720-30ff-11ea-9268-02420a100170.2020-01-07T03:41:03.975895Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.2020-01-07T03:41:04.839331Z 0 [Warning] CA certificate ca.pem is self signed.2020-01-07T03:41:05.515747Z 1 [Note] A temporary password is generated for root@localhost: FwaKHorkK6;3
配置預設my.cnf
rm -f /etc/my.cnf
啟動
啟動
修改啟動指令碼
[root@dev env]# vi ./mysql-5.7.28/support-files/mysql.serverbasedir=/tongfu.net/env/mysql-5.7.28/datadir=/tongfu.net/env/mysql-5.7.28/data/
啟動服務
./mysql-5.7.28/support-files/mysql.server start
修改預設密碼
使用前面在初始化的時候系統返回的資訊裡的最後一行的初始化密碼來修改root密碼
./mysql-5.7.28/bin/mysqladmin -uroot -p password "abcdef"
登入
使用新密碼登入
./mysql-5.7.28/bin/mysql -uroot -pabcdef
自動啟動
新增自動啟動指令碼
[root@dev env]# cat > /lib/systemd/system/mysqld.service <<EOF[Unit]Description=mysqldAfter=network.target[Service]Type=forkingExecStart=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server startExecReload=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server restartExecStop=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server stopPrivateTmp=false[Install]WantedBy=multi-user.targetEOF
使用 systemctl 管理 mysqld 服務
systemctl enable mysqld # 設定自動啟動systemctl start mysqld # 啟動服務systemctl stop mysqld # 停止服務systemctl restart mysqld # 重啟服務
服務命令新增到系統目錄
ln -s /tongfu.net/env/mysql-5.7.28/bin/mysql /usr/bin/ln -s /tongfu.net/env/mysql-5.7.28/bin/mysqldump /usr/bin/
常見錯誤
常見錯誤1
在新版本的 mysql 裡是找不到 my.cnf 配置檔案的,因為 mysql 把大部分引數都設定了預設值,原則上我們不需要設定太多引數
如果想要設定的話,可以從舊版本的 mysql 環境下複製過來,放到mysql的安裝目錄下。當然,你也可以像以前那樣放到 /etc/my.cnf,不過,這樣不利用管理和遷移
常見錯誤2
在新版本的 mysql 裡使用 group by 語句的時候有了限制,簡單說就是 group by 的欄位必須在select 內出現,這樣的話 select * from xxx group by yyy 就行不通了。
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解決方法,在 my.cnf 裡增加一行設定即可
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
這樣就可以隨便寫了~
常見錯誤3
新版本的 mysql 在做同步複製的時候,發現 server_id 改了沒有變化,始終是 4294967295,怎麼回事?經過各自嘗試發現,原理新版本的 mysql 對於 server_id 的位數做了限制,數字不能超過10位,否則就會溢位了
TNND,能不能向後相容啊~~
常見錯誤4
如果在匯入 sql 的時候發現寫入速度非常慢,可以從以下幾個方面檢查
檢查 max_allowed_packet 是否設定太小了,這個會影響大 sql 的寫入速度,一般情況下 dump 出來的 sql 都是多行用一個 insert 語句執行寫入的檢查是不是使用的 innodb 引擎的資料表,innodb 資料表寫和讀都要比 myisam 慢一些檢查有沒有關閉 log-bin,這玩意沒關閉的話匯入速度會慢幾百倍,上千倍,強烈建議匯入資料時候關閉它!!檢查 innodb_flush_log_at_trx_commit 有沒有設定為 0,這玩意設定了非 0 的值的話匯入速度也會慢幾十倍,強烈建議匯入資料時候關閉它!!常見錯誤5
在透過 mysql 連線資料庫時候提示找不到 socket 檔案的話ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)解決方法,在 my.cnf 裡設定一下
使用連線資料庫伺服器
使用下面的命令連線到MySQL資料庫伺服器
[root@dev env]# mysql -uroot -pabcdefmysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.28 MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
建立資料庫
一個數據庫伺服器可以有若干個資料庫,每個資料庫作為一個專案的資料儲存介質使用
使用下面的命令可以建立一個數據庫,福哥建立的是test資料庫
mysql> create database test default charset utf8;Query OK, 1 row affected (0.00 sec)
檢視資料庫列表
使用下面的命令檢視伺服器的資料庫列表,列表包括很多系統資料庫,其中還有我們剛剛建立的test庫
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys || test |+--------------------+5 rows in set (0.00 sec)
選擇資料庫
我們要選擇一個數據庫作為我們正在操作的庫
mysql> use test;Database changed
建立資料表
使用下面的命令可以建立一個數據表,福哥建立的是test資料表,包括兩個欄位id和name
mysql> CREATE TABLE `test` ( -> `id` int NOT NULL AUTO_INCREMENT, -> `name` varchar(45) NOT NULL, -> PRIMARY KEY (`id`) -> );Query OK, 0 rows affected (0.00 sec)
插入新資料
現在我們要像這個資料表test裡插入資料了,資料表test有兩個欄位,分別是int型別和varchar型別,我們可以根據這兩個欄位的型別向裡面寫入值
插入語句如下
mysql> INSERT INTO test (name) VALUES ('福哥');Query OK, 1 row affected (0.10 sec)
檢視資料表資料
現在資料表test裡面已經有了一條資料了,我們可以透過SQL語句對這個資料表進行查詢,得到資料表裡面的資料
查詢語言句如下
mysql> SELECT * FROM test;+----+--------+| id | name |+----+--------+| 1 | 福哥 |+----+--------+1 row in set (0.00 sec)
修改資料表資料
我們可以透過資料表的id精確地對這一行的資料進行修改操作,因為id這一列的資料是唯一的,可以幫助我們精確定位某一具體資料行
更新語句如下
mysql> UPDATE test SET name = '福哥加油' WHERE id = 1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0
刪除資料表資料
mysql> DELETE FROM test WHERE id = 1;Query OK, 1 row affected (0.00 sec)
檢視資料表資料
再次檢視資料表資料,可以看到資料表裡已經空空如也了
mysql> SELECT * FROM test;Empty set (0.00 sec)
退出資料庫伺服器
操作完了之後,就可以退出資料庫伺服器連線了
mysql> exitBye
總結
學會了MySQL的使用技巧,今後我們就可以做一些非常有意思的東西了!目前福哥教大家的語言c/c++、java、php和python都是可以連線MySQL資料庫的,結合MySQL資料庫我們可以做一些中大型的專案,包括且不限於一個部落格,一個論壇,一個留言板,一個換裝遊戲,一個情景遊戲等等。
接下來福哥會一個一個地介紹使用c/c++、java、php、python操作MySQL的方法,童鞋們一定要跟上哦~~
https://m.tongfu.net/home/35/blog/512769.html