1. 搭建前環(huán)境檢查
(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完整狀態(tài)
##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的話,需要重啟系統(tǒng)。反過來也一樣。
##enforcing和permissive模式可以通過setenforce1|0命令快速切換。
##需要注意的是,如果系統(tǒng)已經在關閉SELinux的狀態(tài)下運行了一段時間,在打開SELinux之后的第一次重啟速度可能會比較慢。因為系統(tǒng)必須為磁盤中的文件創(chuàng)建安全上下文(我表示我重啟了大約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
###將分區(qū)設置成gpt格式
## parted /dev/sdc mklabel gpt
###創(chuàng)建一個20G的分區(qū)
##parted /dev/sdc mkpart primary 0 20000
###將剩余的空間全部創(chuàng)建成一個擴展分區(qū)
## parted /dev/sdc mkpart extended 1 100%
##/dev/sdd分區(qū)分成1個分區(qū)
##parted /dev/sdd mklabel gpt
##parted /dev/sdd mkpart primary 0 100%
##將硬盤分為兩個主分區(qū)
##[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 #打印當前分區(qū)
##(parted) mkpart primary 0 4.5TB # 分一個4.5T的主分區(qū)
##(parted) mkpart primary 4.5TB 12TB # 分一個7.5T的主分區(qū)
##(parted) print #打印當前分區(qū)
##(parted) quit 退出
(5) 查看主機上是否有mysql存在:
rpm -qa |grep -i mysql
使用命令卸載 : rpm -e --nodeps xxxxxx
#一、如果是使用yum安裝的mysql,使用如下命令進行卸載(不能確定使用何種方式安裝的mysql情況下,按后續(xù)步驟一一進行處理即可):
## 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,按如下步驟進行處理:
#查看系統(tǒng)中是否以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上創(chuàng)建公鑰和密鑰
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節(jié)點(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節(jié)點(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#多個節(jié)點不能重復
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##執(zhí)行備份的表
replicate_wild_ignore_table#備份過程中忽略的表
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
#replicate-do-db=databasename1,databasename2#執(zhí)行備份的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密碼,創(chuàng)建主從庫復制用戶master:
#在my.cnf中添加
#skip-grant-tables=1
#重啟mysql
#登錄進入數據庫執(zhí)行
#flush privileges;
#set password for root@localhost = password('1');
# flush privileges;
#***改完密碼要把配置改回來,再重啟
set global validate_password_policy=0;
set global validate_password_length=4;
##可能執(zhí)行不成功,對密碼格式的要求,可忽略
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. 主從同步設置:
- 到主庫中執(zhí)行(使用root登錄執(zhí)行) :
show master status \G

- 到從庫中執(zhí)行:
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
