MySQL從入門到精通系列01——生產環境MySQL安裝手冊(VIP)

MYSQL 5.7.26 二進制版本安裝

安裝前環境準備:

搭建yum環境

方法一:搭建阿里雲的yum源(需要服務器可以上網)

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOSBase.repo.backup

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

執行如下命令:

yum makecache

方法二:使用系統iso搭建本地的yum源

mkdir -p /data/os/yum_repo

cd /data/os

上傳iso到/data/os下

mount -o loop CentOS-7.4-x86_64-DVD-1708.iso /data/os/yum_repo/

cd /etc/yum.repos.d/

vi os.repo

[os]

name=os

baseurl=file:///data/os/yum_repo

gpgcheck=0

enabled=1

gpgkey=file:///data/os/yum_repo/RPM-GPG-KEY-redhat-release

執行如下命令:

yum clean all && yum makecache

關閉系統的selinux

查詢是否開啟

getenforce

如果結果為Disabled說明已經關閉了selinux,為其他的結果執行如下關閉操作

臨時關閉

setenforce 0

vi /etc/selinux/config

SELINUX=disabled

該參數改為 disabled 並保存後重新啟動操作系統

根據實際情況選擇關閉系統的防火牆

關閉防火牆:

systemctl stop firewalld

設置開機不啟動:

systemctl disable firewalld

設置swap分區的配置

swappiness的值的大小對如何使用swap分區是有著很大的聯繫的。swappiness=0的時候表示最大限度使用物理內存,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裡面

建議:如果內存足夠大,而且服務器上面也只運行了該mysql數據庫,則可以設置該值偏小。

默認swappiness是60的

[root@linux6 ~]# cat /proc/sys/vm/swappiness

60

在MySQL的服務器上最好設置vm.swappiness=0

如果要修改,則編輯/etc/sysctl.conf,加入vm.swappiness = 0就可以

修改完成了,執行

[root@linux6 ~]# sysctl –p

使參數生效

操作系統的限制

編輯/etc/security/limits.conf,添加

root soft nproc 65536

root soft nproc 65536

root soft nofile 65536

root hard nofile 65536

mysql soft nproc 65536

mysql soft nproc 65536

mysql soft nofile 65536

mysql hard nofile 65536

numa關閉

方法一:OS內核層,啟動時設置numa=off

linux6修改/etc/grub.conf,添加numa=off

linux7修改/boot/grub/menu.lst,添加numa=off

[root@MySQL-01 ~]# vim /etc/grub.conf

[root@MySQL-01 ~]# grep 'numa' /etc/grub.conf

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off

[root@MySQL-01 ~]#

方法二:推薦在mysql啟動前使用參數來關閉

例如

numactl –interleave=all /usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.cnf &

下載並上傳軟件至/data/soft

創建mysql包存放目錄:

[root@linux26 ~]# mkdir -p /data/soft

[root@linux26 ~]# cd /data/soft/

[root@linux26 ~]# yum install -y lrzsz

使用rz命令上傳安裝包

[root@linux26 soft]# ls

mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

解壓軟件

解壓包:

[root@linux26 soft]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

移動到/data下,目錄為mysql(此mysql目錄要不存在)

[root@linux26 soft]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /data/mysql

清除原始環境中mariadb

查詢是否安裝了mariadb

[root@linux26 soft]# rpm -qa | grep mariadb

如果有,則根據查詢出來的結果yum remover刪除

[root@linux26 soft]# yum remove mariadb-libs

磁盤處理:

不新建磁盤修改數據盤的atime屬性

其中noatime,禁止操作系統更新文件的atime屬性。atime是Linux/UNIX系統下的一個文件屬性,每當讀取文件時,操作系統都會將讀操作時間回寫到磁盤上。對於讀寫頻繁的數據庫文件來說,記錄文件的訪問時間一般沒有任何用處,卻會增加磁盤系統的負擔,影響I/O性能!因此,可以通過設置文件系統的mount熟悉,阻止操作系統寫atime信息,減輕磁盤I/O負擔。

(1)修改文件系統配置文件/etc/fstab,指定noatime選項:

UUID=33958004-e8a7-4135-844f-707a5537e86a /data ext4 noatime 0 1

(2)重新mount文件系統使其修改生效:

[root@MySQL-01 ~]# mount -o remount /data

1.添加一塊新磁盤模擬數據盤
2.格式化並掛載磁盤

格式化盤:

[root@linux26 ~]# mkfs.xfs /dev/sdb
創建mysql數據庫的數據文件路徑:

[root@linux26 ~]# mkdir /data/mysql/data

獲取新增磁盤的uuid

[root@linux26 ~]# blkid

把掛載的磁盤記錄寫入/etc/fstab,開機啟動

vim /etc/fstab

UUID=95d55a96-1ca6-4070-a22e-eb6eb1a7462a /data xfs noatime 0 1

掛載磁盤:

[root@linux26 ~]# mount -a

查詢掛載結果:

[root@linux26 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/centos-root 94G 12G 83G 12% /

devtmpfs 1.4G 0 1.4G 0% /dev

tmpfs 1.4G 0 1.4G 0% /dev/shm

tmpfs 1.4G 9.1M 1.4G 1% /run

tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup

/dev/sda1 197M 158M 39M 81% /boot

tmpfs 280M 12K 280M 1% /run/user/42

tmpfs 280M 0 280M 0% /run/user/0

/dev/sdb 20G 33M 20G 1% /data/mysql/data

[root@linux26 ~]# chown -R mysql.mysql /data/mysql

調整磁盤I/O調度算法

臨時生效的方法:

(1)查看當前系統支持的I/O調度算法:

[root@linux26 ~]# dmesg | grep -i scheduler

io scheduler noop registered

io scheduler anticipatory registered

io scheduler deadline registered

io scheduler cfq registered (default)

[root@linux26 ~]#

(2)查看當前設備(/dev/sda)使用的I/O調度算法:

[root@linux26 ~]# cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

[root@linux26 ~]#

(3)修改當前設備使用的I/O調度算法,普通磁盤可以選擇Deadline,SSD我們可以選擇使用NOOP或者Deadline

[root@linux26 ~]# echo "deadline" >> /sys/block/sda/queue/scheduler

[root@linux26 ~]# cat /sys/block/sda/queue/scheduler

noop anticipatory [deadline] cfq

[root@linux26 ~]#

永久生效的方法:

永久修改I/O調度算法,可以通過修改內核引導參數,增加elevator=調度算法名

其中linux6版本修改/etc/grub.conf,而linux7版本修改/boot/grub/menu.lst

[root@linux26 ~]# vim /boot/grub/menu.lst

更改後的內容:

[root@linux26 ~]# grep "deadline" /boot/grub/menu.lst

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM

[root@linux26 ~]#

安裝相關依賴包

yum install libaio -y

開始安裝:

創建mysql用戶

創建mysql用戶

[root@linux26 soft]# useradd -s /sbin/nologin mysql

設置環境變量

vim /etc/profile

export PATH=/data/mysql/bin:$PATH

[root@linux26 soft]# source /etc/profile

[root@linux26 soft]# mysqld -V

mysqld Ver 5.7.26 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))

mkdir -p /data/mysql/data

mkdir -p /data/mysql/log

chown -R mysql.mysql /data/mysql

設置my.cnf配置文件

簡單的模板:

cat >/etc/my.cnf <

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

log_error=/data/mysql/log/mysql_error.log

log_bin=/data/mysql/log/mysql-bin.log

port=3306

server_id=3

[mysql]

socket=/tmp/mysql.sock

EOF

初始化數據庫(創建系統數據)

mysql5.6 版本

初始化命令:/data/mysql/scripts/mysql_install_db

mysql5.7 版本

--initialize參數

正常使用--initialize參數,初始化數據庫後會生成臨時密碼給與登錄

[root@linux26 data]# mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data

說明:

--initialize參數

(1)對於密碼複雜度進行定製:要求密碼要12位,並且有4種密碼格式(比如,大小寫字母、數字、特殊字符)

(2)密碼過期時間:180天

(3)給root@localhost用戶設置臨時密碼

如果在啟動的時候出現如下報錯,則需要對缺少的依賴包進行安裝即可

[root@linux26 data]# mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data

執行完成初始化的命令,會出現如下的提示:

2020-02-29T08:56:15.521948Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2020-02-29T08:56:15.695632Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-02-29T08:56:15.727546Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2020-02-29T08:56:15.801784Z 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: 57ecb8b9-5ad1-11ea-b70b-000c29375cdc.

2020-02-29T08:56:15.802632Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2020-02-29T08:56:15.804654Z 1 [Note] A temporary password is generated for root@localhost: riY_

其中標黃色部分就是生成的臨時密碼,後續需要修改密碼

--initialize-insecure參數

使用--initialize-insecure參數初始化數據庫就不會生成密碼,直接msyqld就可以登錄數據庫

如果已經用--initialize參數初始化過數據庫,需要先刪除數據文件的目錄:

[root@linux26 data]# rm -rf /data/mysql/data/*

使用--initialize-insecure進行初始化數據庫

[root@linux26 data]# mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data

2020-02-29T09:06:30.390965Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2020-02-29T09:06:30.524295Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-02-29T09:06:30.553929Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2020-02-29T09:06:30.612936Z 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: c661754e-5ad2-11ea-8dcc-000c29375cdc.

2020-02-29T09:06:30.613884Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2020-02-29T09:06:30.614951Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

此時無需密碼也可以登錄數據庫

安裝完成後調整:

設置mysql啟動方式

sys-v(linux6的方法)

[root@linux26 data]# cp /data/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@linux26 data]# service mysqld restart

systemd(linux7的方法)

注意:如果已經用sys-v方式啟動過數據庫的話,需要先用sys-v方式關閉,才可以用以下的方式登錄數據庫

sys-v方式停止數據庫

[root@linux26 data]# /etc/init.d/mysqld stop

配置systemd的文件

cat >/etc/systemd/system/mysqld.service <

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/data/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000

EOF

配置完成就可以用systemctl命令來控制mysql的啟動和關閉

[root@linux26 data]# systemctl start mysqld

修改MySQL的root密碼

登錄到MySQL數據庫中,執行如下語句:

update mysql.user set authentication_string=password('root') where user='root';

flush privileges;

mysql數據庫啟動報錯

類似:without updating PID錯誤

思路:

(1) 查看日誌,目錄為/data/mysql/data/主機名.err,主要看該日誌最後部分有[ERROR]的上下文

(2) 可能有的報錯情況:

/et/my.cnf 路徑不對

/tmp/mysql.sock 文件修改過或者刪除過

數據目錄權限不是mysql

參數改錯了


"


分享到:


相關文章: