如果編寫一個小工具、小遊戲,可以直接寫代碼,它不涉及存儲數據的操作,不過如果要編寫一個網路工具、系統平台、網路遊戲就需要將大量的數據存儲起來。
早期存儲數據都是使用文件存儲,不過使用文件作為存儲媒介是非常有局限性了。首先文件是獨立的,很難進行統計操作;其次文件依賴IO句柄,頻繁的進行打開文件、關閉文件,會對系統資源造成影響。
這時候資料庫(Database)就應運而生了,它可以最大限度的解決存儲和讀取的問題,依賴公共的SQL語法標準,可以快速、靈活的對資料庫引擎進行數據存儲和數據讀取。
MySQL是一款開源的、免費的、功能強大的資料庫引擎,今天就跟著福哥來學習如何在我們的TFLinux操作系統上面安裝MySQL資料庫引擎吧。
基本信息
安裝環境
CentOS:CentOS Linux release 7.6.1810 (Core)Linux:Linux version 3.10.0-1062.el7.x86_64
GCC: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 /packages
cd /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=45790
2020-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
刪除默認的my.cnf文件
rm -f /etc/my.cnf啟動
啟動
修改啟動腳本
[root@dev env]# vi ./mysql-5.7.28/support-files/mysql.server
basedir=/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=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server start
ExecReload=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server restart
ExecStop=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server stop
PrivateTmp=false
[Install]
WantedBy=multi-user.target
EOF使用 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 -pabcdef
mysql: [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 3
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.
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刪除數據表數據
如果需要刪除掉數據表當中的數據,可以通過數據表的id精確定位某一行數據,將之刪除掉
刪除語句如下
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> exit
Bye總結
學會了MySQL的使用技巧,今後我們就可以做一些非常有意思的東西了!目前福哥教大家的語言c/c++、java、php和python都是可以連接MySQL資料庫的,結合MySQL資料庫我們可以做一些中大型的項目,包括且不限於一個博客,一個論壇,一個留言板,一個換裝遊戲,一個情景遊戲等等。
接下來福哥會一個一個地介紹使用c/c++、java、php、python操作MySQL的方法,童鞋們一定要跟上哦~~
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/277470.html
微信掃一掃
支付寶掃一掃