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 初始化命令:/data/mysql/scripts/mysql_install_db 正常使用--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. 初始化數據庫(創建系統數據)
mysql5.6 版本
mysql5.7 版本
--initialize參數
2020-02-29T08:56:15.804654Z 1 [Note] A temporary password is generated for root@localhost: riY_ 其中標黃色部分就是生成的臨時密碼,後續需要修改密碼 使用--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. 此時無需密碼也可以登錄數據庫 --initialize-insecure參數
安裝完成後調整:
設置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數據庫中,執行如下語句: update mysql.user set authentication_string=password('root') where user='root'; flush privileges; 類似:without updating PID錯誤 思路: (1) 查看日誌,目錄為/data/mysql/data/主機名.err,主要看該日誌最後部分有[ERROR]的上下文 (2) 可能有的報錯情況: /et/my.cnf 路徑不對 /tmp/mysql.sock 文件修改過或者刪除過 修改MySQL的root密碼
mysql數據庫啟動報錯
數據目錄權限不是mysql
參數改錯了
閱讀更多 瀟餘keungyu 的文章