安裝mysql詳細步驟「虛擬機安裝mysql數據庫」

如果編寫一個小工具、小遊戲,可以直接寫代碼,它不涉及存儲數據的操作,不過如果要編寫一個網絡工具、系統平台、網絡遊戲就需要將大量的數據存儲起來。

早期存儲數據都是使用文件存儲,不過使用文件作為存儲媒介是非常有局限性了。首先文件是獨立的,很難進行統計操作;其次文件依賴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-hk/n/277470.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-19 13:26
下一篇 2024-12-19 13:26

相關推薦

發表回復

登錄後才能評論