1. 搭建前环境检查
(1) 检查防火墙是否关闭:
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
(2) 查看swap空间是否关闭:
free -h
关闭 : swapoff -a
(3) selinux查看:
sestatus
或者 : cat /etc/selinux/config
##sestatus:#查看selinux完整状态
##setenforce 0|1#开启或关闭
##0:设置为permissive
##1:设置为enforcing
##配置文件:
##/boot/grub/grub.conf在对应的kernel内核参数后面追加
##selinux=1 (启用)selinux=0(禁用)
##/etc/sysconfig/selinux
##/etc/selinux/config
##SELINUX变量有3中参数:
##SELINUX={disabled|enforcing|permissive}
##ps:https://www.cnblogs.com/sunshine-long/p/8871947.html
##SELinux工作模式可以在/etc/selinux/config中设定。
##如果想从disabled切换到enforcing或者permissive的话,需要重启系统。反过来也一样。
##enforcing和permissive模式可以通过setenforce1|0命令快速切换。
##需要注意的是,如果系统已经在关闭SELinux的状态下运行了一段时间,在打开SELinux之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约10分钟,还以为是死机了……)。
##SELinux日志的记录需要借助auditd.service这个服务,请不要禁用它。
(4) 查看磁盘是否挂载
lsblk
例如 经测试根目录为ssd盘(4240G raid0+1)在 10.162.16.221~ 10.162.16.223上挂载磁盘sdb(600G2 raid1,作为bin_log日志存储)
1.建立挂载点
mkdir -p /data
2.挂载数据盘
echo -e 'mklabel gpt \nmkpart primary 0% 100%\nyes\nquit\n' |parted /dev/sdb
mkfs.xfs -f /dev/sdb1
a=`blkid /dev/sdb1|awk -F '"' '{print $2}'`
echo "UUID=$a /data xfs defaults,noatime 1 2" >> /etc/fstab
mount -a
###将分区设置成gpt格式
## parted /dev/sdc mklabel gpt
###创建一个20G的分区
##parted /dev/sdc mkpart primary 0 20000
###将剩余的空间全部创建成一个扩展分区
## parted /dev/sdc mkpart extended 1 100%
##/dev/sdd分区分成1个分区
##parted /dev/sdd mklabel gpt
##parted /dev/sdd mkpart primary 0 100%
##将硬盘分为两个主分区
##[root@localhost ~]# parted /dev/sdb
##GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands.
##(parted) mklabel gpt # 将MBR磁盘格式化为GPT
##(parted) print #打印当前分区
##(parted) mkpart primary 0 4.5TB # 分一个4.5T的主分区
##(parted) mkpart primary 4.5TB 12TB # 分一个7.5T的主分区
##(parted) print #打印当前分区
##(parted) quit 退出
(5) 查看主机上是否有mysql存在:
rpm -qa |grep -i mysql
使用命令卸载 : rpm -e --nodeps xxxxxx
#一、如果是使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可):
## yum remove mysql mysql-server mysql-libs compat-mysql51
## rm -rf /var/lib/mysq
## rm /etc/my.cnf
#使用rpm -qa|grep mysql命令来查看rpm方式安装的mysql,如果查询结果不为空,需要将这些rpm卸载掉。
#
#二、如果是使用rpm方式安装的mysql,按如下步骤进行处理:
#查看系统中是否以rpm包安装的mysql:
## rpm -qa | grep -i mysql
#使用rpm -e 命令将上个命令中包列表一一进行卸载。
#
#然后删除mysql相关的服务。
## chkconfig --list | grep -i mysql
## chkconfig --del mysql
#
#然后找出OS中分散的mysql文件夹,并删除。
## find / -name mysql
#
#最后清空mysql相关的的所有目录以及文件
## rm -rf
(6) 建立hadoop用户
hadoop用户
useradd -d /home/hadoop hadoop
echo 'H_x86_r00t' | passwd --stdin hadoop
echo "hadoop soft nofile 131072" >> /etc/security/limits.conf
echo "hadoop hard nofile 131072" >> /etc/security/limits.conf
echo "hadoop soft nproc unlimited" >> /etc/security/limits.d/20-nproc.conf
echo "hadoop hard nproc unlimited" >> /etc/security/limits.d/20-nproc.conf
chage -M 99999 hadoop
(7) 配置hadoop用户免密:
步骤1: 用 ssh-key-gen 在主机10.162.16.221上创建公钥和密钥
ssh-keygen -t rsa
步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.162.16.222
步骤3:ssh到主机10.162.16.222
scp -r ~/.ssh/ 到10.162.16.221和10.162.16.223
2. 搭建mysql-5.7.20-1.el7.x86_64
(1) 上传解压mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
tar -zxvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar -C mysql/
(2) 按照顺序安装:
按照以下顺序进行安装,因为它们之间存在依赖关系
common --> libs --> clients --> server
此外需要安装libs-compat ,devel
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.20-1.el7.x86_64.rpm
当安装server中出现:
需要补充依赖:
yum -y install libaio
yum -y install net-tools
yum -y install perl
#perl依赖:
#perl-Carp.noarch 0:1.26-244.el7
#perl-Encode.x86_64 0:2.51-7.el7
#perl-Exporter.noarch 0:5.68-3.el7
#perl-File-Path.noarch 0:2.09-2.el7
#perl-File-Temp.noarch 0:0.23.01-3.el7
#perl-Filter.x86_64 0:1.49-3.el7
#perl-Getopt-Long.noarch 0:2.40-3.el7
#perl-HTTP-Tiny.noarch 0:0.033-3.el7
#perl-PathTools.x86_64 0:3.40-5.el7
#perl-Pod-Escapes.noarch 1:1.04-297.el7
#perl-Pod-Perldoc.noarch 0:3.20-4.el7
#perl-Pod-Simple.noarch 1:3.28-4.el7
#perl-Pod-Usage.noarch 0:1.63-3.el7
#perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
#perl-Socket.x86_64 0:2.010-5.el7
#perl-Storable.x86_64 0:2.45-3.el7
#perl-Text-ParseWords.noarch 0:3.29-4.el7
#perl-Time-HiRes.x86_64 4:1.9725-3.el7
#perl-Time-Local.noarch 0:1.2300-2.el7
#perl-constant.noarch 0:1.27-2.el7
#perl-libs.x86_64 4:5.16.3-297.el7
#perl-macros.x86_64 4:5.16.3-297.el7
#perl-parent.noarch 1:0.225-244.el7
#perl-podlators.noarch 0:2.5.1-3.el7
#perl-threads.x86_64 0:1.87-4.el7
#perl-threads-shared.x86_64 0:1.43-6.el7
(3) my.cnf文件的配置:
-master节点(10.162.16.221):
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
datadir=/var/lib/mysql/
socket=/var/lib/mysql/mysql.sock
server-id = 221
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 512K
read_buffer_size = 512K
read_rnd_buffer_size = 512K
net_buffer_length = 2K
thread_stack = 512K
user=mysql
log_bin=/data/mysql-bin/mysql-bin
log-slave-updates
binlog_format=mixed
max_binlog_size=1G
binlog_row_image=full
group_concat_max_len=10240000
relay_log=mysqld-relay-bin
log-slave-updates=YES
log_bin_trust_function_creators=1
lower_case_table_names=1
sql_mode=
transaction_isolation=READ-COMMITTED
binlog_format=mixed
max_allowed_packet=104857600
character_set_server=utf8
collation_server=utf8_general_ci
open_files_limit = 65535
max_connections = 3000
event_scheduler = on
wait_timeout=86400
interactive_timeout = 86400
slave_parallel_type=LOGICAL_CLOCK
slave-parallel-workers=8
relay_log_recovery = 1
master_info_repository = TABLE
relay_log_info_repository = TABLE
default-time_zone = '+8:00'
skip_name_resolve = 1
max_connect_errors=1000
federated
lock_wait_timeout = 900
long_query_time = 2
slow_query_log = 1
slow_query_log_file = slow.log
log_timestamps = SYSTEM
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_file_per_table = 1
innodb_buffer_pool_size = 12G
innodb_doublewrite = ON
innodb_thread_concurrency = 64
innodb_purge_threads = 6
innodb_read_io_threads = 6
innodb_write_io_threads = 6
innodb_buffer_pool_instances = 10
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_log_buffer_size = 100M
innodb_io_capacity = 400
innodb_io_capacity_max = 800
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_print_all_deadlocks = 1
join_buffer_size=4M
tmp_table_size=64M
read_buffer_size=4M
read_rnd_buffer_size=4M
innodb_sort_buffer_size=4M
###semi sync replication settings###
plugin_dir = /usr/lib64/mysql/plugin
plugin_load='rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so'
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
-slave节点(10.162.16.222,10.162.16.223):
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 222#多个节点不能重复
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 512K
read_buffer_size = 512K
read_rnd_buffer_size = 512K
net_buffer_length = 2K
thread_stack = 512K
user=mysql
log_bin=/data/mysql-bin/mysql-bin
log-slave-updates
binlog_format=mixed
max_binlog_size=1G
binlog_row_image=full
group_concat_max_len=10240000
relay_log=mysqld-relay-bin
log-slave-updates=YES
log_bin_trust_function_creators=1
lower_case_table_names=1
sql_mode=
transaction_isolation=READ-COMMITTED
binlog_format=mixed
max_allowed_packet=104857600
character_set_server=utf8
collation_server=utf8_general_ci
#replicate_wild_do_table##执行备份的表
replicate_wild_ignore_table#备份过程中忽略的表
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
#replicate-do-db=databasename1,databasename2#执行备份的db
#replicate-ignore-db =databasename1,databasename2#忽略备份的db
#read_only=on
#read-only=1
open_files_limit = 65535
max_connections = 3000
event_scheduler = on
wait_timeout=86400
interactive_timeout = 86400
slave_parallel_type=LOGICAL_CLOCK
slave-parallel-workers=8
relay_log_recovery = 1
master_info_repository = TABLE
relay_log_info_repository = TABLE
default-time_zone = '+8:00'
skip_name_resolve = 1
max_connect_errors=1000
federated
lock_wait_timeout = 900
long_query_time = 2
slow_query_log = 1
slow_query_log_file = slow.log
log_timestamps = SYSTEM
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_file_per_table = 1
innodb_buffer_pool_size = 12G
innodb_doublewrite = ON
innodb_thread_concurrency = 64
innodb_purge_threads = 6
innodb_read_io_threads = 6
innodb_write_io_threads = 6
innodb_buffer_pool_instances = 10
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_log_buffer_size = 100M
innodb_io_capacity = 400
innodb_io_capacity_max = 800
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_print_all_deadlocks = 1
join_buffer_size=4M
tmp_table_size=64M
read_buffer_size=4M
read_rnd_buffer_size=4M
innodb_sort_buffer_size=4M
###semi sync replication settings###
plugin_dir = /usr/lib64/mysql/plugin
plugin_load='rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so'
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
(4) 启动mysql服务:
service mysqld start
#若出现报错:
#Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
#2021-01-06T13:12:13.038795+08:00 0 [ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.
#需清空数据存储目录datadir
chmod 777 /var/lib/mysql/mysql.sock
进入mysql数据库:
mysql -uroot -p
#mysql安装时会产生一个临时的密码 我们获取这个密码
#grep 'temporary password' /var/log/mysqld.log
(5)修改root密码,创建主从库复制用户master:
#在my.cnf中添加
#skip-grant-tables=1
#重启mysql
#登录进入数据库执行
#flush privileges;
#set password for root@localhost = password('1');
# flush privileges;
#***改完密码要把配置改回来,再重启
set global validate_password_policy=0;
set global validate_password_length=4;
##可能执行不成功,对密码格式的要求,可忽略
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('A_yLwVTr2J_O');
grant replication slave on *.* to 'master'@'%'identified by 'oracle';
flush privileges;
(6) 测试:
在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中。
主库
授权用户:
mysql> grant replication slave on *.* to 'master'@'%'identified by 'oracle';
mysql> flush privileges;
建立一个复制账户master,设置密码为oracle,并授权replication slave
从库:
mysql> grant replication slave on *.* to 'master'@'%' identified by 'oracle';
mysql> flush privileges;
测试授权账户是否OK,让10.162.16.221和10.162.16.222互访登录就OK
主库主机访问从库:
mysql -h 10.162.16.222 -u master -p
oracle
从从库访问主库:
mysql -h 10.162.16.221 -u master -p
oracle
3. 主从同步设置:
- 到主库中执行(使用root登录执行) :
show master status \G
- 到从库中执行:
change master to
master_host='10.162.16.221',
master_user='master',
master_password='oracle',
master_log_file='mysql-bin.000007',
master_log_pos= 818254936;
start slave;
show slave status\G;
- 以下可视情况设置:
延迟同步设置:
stop slave;
change master to master_delay=600;
start slave;
show slave status \G
- GTID复制异常的解决方法,主从复制使用的是GTID方式(误删除等处理)
stop slave;
set gtid_next='1023843c-fd6e-ee16-7083-f580b4a8af63:4';
begin;commit;
set gtid_next='automatic';
change master to master_delay=0;
- 在两台从库启动slave
show slave status \G