MySQL安装部署
一、环境介绍
系统及软件版本
Linux:CentOS Linux 7
MySQL:MySQL-5.6.48
二、安装MySQL
方案一:Yum安装
1、配置yum软件仓库
①检查yum源是否有nginx安装包
[root@mysql-master ~]# yum list | grep mysql
②配置yum(实现步骤①的前提下,可跳过步骤②)
[root@mysql-master yum.repos.d]# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
[root@mysql-master yum.repos.d]# yum localinstall mysql57-community-release-el7-8.noarch.rpm
[root@mysql-master yum.repos.d]# vim mysql-community.repo
#修改MySQL安装版本,执行命令:vi /etc/yum.repos.d/mysql-community.repo源。例如要安装5.6版本,将5.7的源的enabled = 1修改为enabled = 0。然后再将5.6源的enabled=0改成enabled=1即可。
[root@mysql-master ~]# yum clean all
[root@mysql-master ~]# yum repolist
[root@mysql-master ~]# yum list|grep mysql
2、yum安装mysql
[root@mysql-master mysql]# yum -y install mysql-community-devel mysql-community-server mysql-community-client #安装这三个包即可
方案二:RPM包安装
1、上传相关rpm包并解压
[root@mysql-slave1]# tar -xvf MySQL-5.6.48-1.el7.x86_64.rpm-bundle.tar
2、卸载其他版本MySQL
[root@mysql-slave1]# yum list mysql*
[root@mysql-slave1]# yum remove -y msyql*
3、安装相关依赖包
[root@mysql-slave1]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm
[root@mysql-slave1]# rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
[root@mysql-slave1]# yum install -y numactl perl autoconf
4、安装mysql-5.6.48
[root@mysql-slave1]# rpm -ivh MySQL-server-5.6.44-1.el6.x86_64.rpm
[root@mysql-slave1]# rpm -ivh MySQL-client-5.6.44-1.el6.x86_64.rpm
[root@mysql-slave1]# rpm -ivh MySQL-devel-5.6.44-1.el6.x86_64.rpm
[root@mysql-slave1]# rpm -ivh MySQL-embedded-5.6.44-1.el6.x86_64.rpm
三、初始化配置
①规划分区
[root@web01 ~]# lsblk #检查系统磁盘信息,发现可用磁盘
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 30G 0 disk
└─vda1 253:1 0 30G 0 part /
vdb 253:16 0 50G 0 disk
[root@web01 ~]# fdisk /dev/vdb #对可用磁盘进行分区
[root@web01 ~]# lsblk #检查分区是否成功
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 30G 0 disk
└─vda1 253:1 0 30G 0 part /
vdb 253:16 0 50G 0 disk
└─vdb1 253:17 0 50G 0 part
[root@web01 ~]# pvcreate /dev/vdb1 #创建物理卷
root@web01 ~]# pvs # 检查物理卷
[root@web01 ~]# vgcreate vg_vdb1 /dev/vdb1 #创建卷组vg_vdb1
[root@web01 ~]# vgs #检查卷组
[root@web01 ~]# lvcreate -n lv_vg_vdb1 -L 49G vg_vdb1 #创建逻辑卷
[root@web01 ~]# lvs #检查逻辑卷
[root@web01 ~]# mkfs.ext4 /dev/vg_vdb1/lv_vg_vdb1 # 对逻辑卷进行格式化
[root@web01 ~]# mount /dev/vg_vdb1/lv_vg_vdb1 /data/ #将/data挂载到逻辑卷上
[root@web01 ~]# df -h #检查是否挂载成功
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 30G 1.3G 29G 5% /
devtmpfs 697M 0 697M 0% /dev
tmpfs 707M 0 707M 0% /dev/shm
tmpfs 707M 8.4M 699M 2% /run
tmpfs 707M 0 707M 0% /sys/fs/cgroup
tmpfs 142M 0 142M 0% /run/user/0
/dev/mapper/vg_vdb1-lv_vg_vdb1 49G 53M 46G 1% /data
[root@web01 ~]# echo "/dev/vg_vdb1/lv_vg_vdb1 /data/ ext4 defaults 0 0" >> /etc/fstab # 写进配置文件,使其永久生效
②复制Mysql目录到/data目录下
[root@web01 ~]# mv /var/lib/mysql /data/
③修改配置文件
[root@web01 ~]# vim /etc/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[results]
default-character-set=utf8mb4
[connection]
default-character-set=utf8mb4
[mysqld]
#----------------------buffer --------------------------
# key_buffer_size = # 指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads /key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%'获得)。
read_rnd_buffer_size = 16M # 随机读缓冲区大小,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。一般可设置为16M。
sort_buffer_size = 16M # 进行排序的线程缓冲区,增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),可改为16777208 (16M)。
join_buffer_size = 16M # 联合查询操作的缓冲区大小,是根据内存大小等来设置的
innodb_buffer_pool_size = 500M # InnoDB使用该参数指定大小的内存来缓冲数据和索引,对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。 根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。
#----------------------connection------------------------------
max_connections = 1000 # 最大连接数max_used_connections / max_connections (理想值≈ 0.85)如果max_used_connections跟max_connections相同,那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大
back_log = 80 #MySQL能暂存的连接数量mysql中back_log的设置取决于操作系统,在Linux下这个参数的值不能大于系统参数tcp_max_syn_backlog的值
thread_cache_size = 20 # 可复用的保存在内存中的线程的数量
wait_timeout = 28800 #指定一个请求的最大连接时间
#----------------------table------------------------------------
innodb_log_buffer_size = 4M # log缓存大小,一般为1-8M,默认为1M,对于较大的事务,可以增大缓存大小。 可设置为4M或8M。
innodb_additional_mem_pool_size = 20M # 该参数指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是1M。通常不用太大,只要够用就行,应该与表结构的复杂度有关系。如果不够用,MySQL会在错误日志中写入一条警告信息。 根据MySQL手册,对于2G内存的机器,推荐值是20M,可适当增加
max_tmp_tables = 96 # 创建内存表(memory table)的大小,支持动态改变。这个参数和tmp_table_size一起限制内部内存表的大小。如果某个内部heap堆积表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。
tmp_table_size = 4G # 临时表的大小,例如做高级GROUP BY操作生成的临时表。如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表。
max_heap_table_size = 4G # 创建内存表(memory table)的大小,支持动态改变。这个参数和tmp_table_size一起限制内部内存表的大小。如果某个内部heap堆积表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。
table_open_cache = 512
#---------------------- binlog --------------------------
server_id = 1
log-bin = ON
log-bin = /data/mysql/data/mysql-bin
expire-logs-days = 7
binlog-ignore-db = mysql
binlog_format = ROW
expire_logs_days = 5
#---------------------- slow_log--------------------------
slow_query_log = ON
slow_query_log_file = /data/mysql/data/localhost-slow.log
slow_launch_time =2
#---------------------- paths --------------
datadir = /data/mysql/data
socket = /data/mysql/mysql.sock
bind_address = 0.0.0.0
port = 3306
#tmpdir = /var/mysql/
character_set_server = utf8
skip-host-cache
skip-name-resolve
auto-increment-increment = 1
auto-increment-offset = 1
log-slave-updates =
relay_log_purge = 1
relay-log = /data/mysql/data/slave-relay.log
relay-log-index = /data/mysql/data/slave-relay-log.index
expire_logs_days = 3
max_binlog_size = 50M
sync_binlog = 0
explicit_defaults_for_timestamp = 1
sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
symbolic-links = 0
#---------------------- other stuff -----------------------
event_scheduler = 0
query_cache_size = 4G
query_cache_type = 1
thread_cache_size = 8
transaction_isolation =READ-COMMITTED
#----------------------mysql_safe-----------------------
log-error = /data/mysql/data/mysqld.log
pid-file = /data/mysql/data/mysqld.pid
4、启动服务并且修改初始密码
[root@web01 data]# systemctl restart mysql
[root@web01 data]# grep password /data/mysql/data/mysqld.log
?????
[root@mysql-slave1 data]# mysql -uroot -p????
mysql> alter user root@'localhost' identified by 'NewPassword'
mysql> exit
5、启动初始化安全脚本mysql_secure_installation
[root@web01 mysql]# mysql_secure_installation
.
.
.
Enter current password for root (enter for none): NewPasswd #输入mysql密码
Remove anonymous users? [Y/n] Y #是否删除匿名用户
Disallow root login remotely? [Y/n] Y #是否禁止远程登录
Remove test database and access to it? [Y/n] Y #删除测试数据库,并登录
Reload privilege tables now? [Y/n] Y #重新载入权限表
.
.
.
四、主从配置
1、MySQL安装同上
2、配置文件
①在主库配置文件[mysqld]中添加
##---------------------- master_option ---------------------
server-id = 1
log-bin =/data/mysql/data/mysql-bin.log
binlog-do-db =dbname
binlog-ignore-db =mysql
binlog_format =ROW
log-bin-trust-function-creators =1
②在主库中检查配置
[root@mysql-master data]# systemctl restart mysql
[root@mysql-master data]# mysql -uroot -p # 进入主库
mysql> GRANT REPLICATION SLAVE ON *.* to 'repliuser'@'%' identified by 'PASSWORD'; #授权用户
mysql> show master status; # 查看binlog文件名和偏移量
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
③在从库配置文件[mysqld]中添加
##---------------------- Slave_options -------------------------
server-id = 2
replicate-do-db = dbname
replicate-ignore-db = mysql
read_only = 1
slave-skip-errors = 1032,1062
[root@mysql-slave1 data]# systemctl restart mysql
[root@mysql-slave1 data]# mysql -uroot -p # 进入从库
3、在从库数据库中输入以下指令
mysql> change master to master_host='192.168.145.222',master_user='repliuser',master_password='q123456',master_log_file='mysql-bin.000001',master_log_pos=154;
mysql> start slave;# 启动从服务器复制功能
mysql> show slave status\G;#slave_io和slave_sql处于yes状态,主从即搭建成功
.
.
.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.
.
.
4、检查主从是否实现预期
①在主库中添加库test
mysql> create DATABASE check;
mysql> use check;
mysql> create TABLE user(name char(20),id int);
mysql> insert into check.user(tom,1);
②在从库中检查
[root@mysql-slave1 data]# mysql -uroot -p # 进入从库
mysql> show DATABASES;
mysql> show TABLES;
mysql> select * from check.user;