CentOS7.X安裝部署mysql5.7主從環境

生產搭建環境:
操作系統:CentOS7.5
內存大小:32GB
硬盤:500G
主庫IP:192.168.8.129 hostname:master
從庫IP:192.168.8.130 hostname:slave

涉及主從都需要執行的地方,文中只寫主庫的操作指使,從庫請自覺執行相同的命令

目錄:
1、環境準備與清理
2、參數調優
3、安裝部署

1、系統初始化
1.1.1. 主從庫環境關閉selinux


[root@master]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
[root@master]# setenforce 0


1.1.2. 主從庫系統主機時間、時區、系統語言
 修改時區


[root@master]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


 修改系統語言環境


[root@master]# echo 'LANG="en_US.UTF-8"' >> /etc/profile && source /etc/profile


2、數據庫安裝
2.1 主從環境準備
2.1.1. 環境清理


[root@master]# yum list installed | grep mariadb
[root@master]# yum list installed | grep mysql
[root@master]# yum -y remove mariadb
[root@master]# yum -y remove mysql*
[root@master]# rm -rf /etc/my.cnf


2.1.2. 環境依賴包安裝


[root@master]# yum -y install bzr zlib-devel gcc-c++ ncurses-devel libev make gcc autoconf automake zlib libxml libgcrypt libtool bison perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5 rsync perl-Data-Dumper net-tools


2.1.3. 創建用戶設置

[root@master]# groupadd mysql
[root@master]# useradd mysql -g mysql -s /sbin/nologin -M

2.1.4. 配置系統內核參數


[root@master]# vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
vm.swappiness = 0
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
kernel.shmmax = 8589934592
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 1010 129280 1010 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
fs.file-max = 6815744
[root@master]# /sbin/sysctl -p


2.1.5. 修改系統資源限制


[root@master]# vi /etc/security/limits.conf
mysql soft nproc 65535
mysql hard nproc 65535
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft stack 10240


2.1.6. 修改環境變量


[root@master]# vi /etc/profile
if [ $USER = "mysql" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
[root@master]# source /etc/profile


2.2 主從環境安裝mysql
2.2.1. 創建軟件安裝目錄


[root@master]# mkdir -p /data/mysql/{logs,data,binlog}
[root@master]# mkdir /var/lib/mysql
[root@master]# chown -R mysql:mysql /data/
[root@master]# chown -R mysql:mysql /var/lib/mysql


2.2.2. 安裝部署
 下載MySQL Yum Repository源


[root@master]# yum -y install numactl wget
[root@master]# wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
[root@master]# rpm -ivh mysql57-community-release-el7-10.noarch.rpm


 安裝MySQL(上傳mysql軟件包到/opt/software)


[root@master]# cd /opt/software
[root@master]# rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm mysql-community-devel-5.7.27-1.el7.x86_64.rpm mysql-community-libs-5.7.27-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm mysql-community-common-5.7.27-1.el7.x86_64.rpm mysql-community-server-5.7.27-1.el7.x86_64.rpm


2.2.3. 配置數據庫啓動參數


[root@master]# vi /etc/my.cnf
[client]
port = 3306

[mysql]
auto-rehash

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/data
port = 3306
character_set_server = utf8
explicit_defaults_for_timestamp = off
log_timestamps = system
socket = /var/lib/mysql/mysql.sock
read_only = 0
skip_name_resolve = 1
auto_increment_increment = 1
auto_increment_offset = 1
secure_file_priv =
open_files_limit = 65535
max_connections = 1000
thread_cache_size = 64
table_open_cache = 81920
table_definition_cache = 4096
table_open_cache_instances = 64
max_prepared_stmt_count = 1048576
binlog_format = row
log_bin = /data/mysql/binlog/mysql-bin
binlog_rows_query_log_events = on
log_slave_updates = on
expire_logs_days = 7
binlog_cache_size = 65536
log_bin_trust_function_creators = 1
sync_binlog = 1
slave-preserve-commit-order = ON
log_error = /data/mysql/logs/error.log
general_log = off
general_log_file = /data/mysql/logs/general.log
slow_query_log = on
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 1.000000
gtid_mode = on
enforce_gtid_consistency = on
skip_slave_start = 1
slave_parallel_type = logical_clock
slave_parallel_workers = 4
binlog_group_commit_sync_delay = 100
binlog_group_commit_sync_no_delay_count = 10
default_storage_engine = innodb
default_tmp_storage_engine = innodb
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_temp_data_file_path = ibtmp1:12M:autoextend
innodb_buffer_pool_filename = ib_buffer_pool
innodb_log_group_home_dir = /data/mysql/data
innodb_log_files_in_group = 3
innodb_log_file_size = 1024M
innodb_file_per_table = on
innodb_online_alter_log_max_size = 128M
innodb_open_files = 65535
innodb_page_size = 16k
innodb_thread_concurrency = 0
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_print_all_deadlocks = on
innodb_deadlock_detect = on
innodb_lock_wait_timeout = 20
innodb_spin_wait_delay = 128
innodb_autoinc_lock_mode = 2
innodb_io_capacity = 200
innodb_io_capacity_max = 2000
innodb_stats_auto_recalc = on
innodb_stats_persistent = on
innodb_stats_persistent_sample_pages = 20

innodb_adaptive_hash_index = on
innodb_change_buffering = all
innodb_change_buffer_max_size = 25
innodb_flush_neighbors = 1
#innodb_flush_method =
innodb_doublewrite = on
innodb_log_buffer_size = 128M
innodb_flush_log_at_timeout = 1
innodb_flush_log_at_trx_commit = 1
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 4
autocommit = 1
innodb_old_blocks_pct = 37
innodb_old_blocks_time = 1000
innodb_read_ahead_threshold = 56
innodb_random_read_ahead = OFF
innodb_buffer_pool_dump_pct = 25
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup = ON


2.2.4. 啓動數據庫,配置服務自啓動


[root@master]# systemctl start mysqld
[root@master]# systemctl enable mysqld


 查看數據庫是否已經啓動,配置服務是否添加自啓動成功


[root@master]# ps -ef|grep mysqld #查看運行進程
[root@master]# systemctl status mysqld #查看運行狀態
[root@master]# systemctl list-unit-files |grep mysqld #查看是否自啓動


2.2.5. 修改MySQL數據庫root用戶密碼
 獲取MySQL數據庫root用戶的臨時密碼


[root@master]# cat /data/mysql/logs/error.log | grep 'A temporary password'
[Note] A temporary password is generated for root@localhost: #5+t+xYW+<t?
 其中#5+t+xYW+<t?即爲root用戶的臨時密碼
#mysql -uroot -p
Enter password:
mysql> alter user 'root'@'localhost' identified by '密碼';
mysql> flush privileges;


2.2.6. 防火牆開放端口
 根據實際要求,添加開放端口
[root@master]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
 重新載入
#firewall-cmd --reload


2.2.7. 數據導入


[root@master]# mysql -uroot -p
Enter password:
mysql> create database sidname default character set utf8 collate utf8_bin;
mysql> grant select,insert,update,delete,create,execute on sidname.* to 'username'@'%' identified by '密碼';
mysql> flush privileges;
還原數據庫
[root@master]# mysql -uroot -p'passwd' sidname < /tmp/XXX.sql


2.3 主從數據庫配置
2.3.1 主庫環境配置
 主庫的配置分8個步驟(注意操作的連接窗口執行對應的命令)
Shell窗口1:
1、授權給從機服務器(根據實際需要配置從機登錄用戶名稱slave與密碼)


[root@master]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE ON . to 'slave'@'192.168.8.130' identified by '密碼';
mysql> FLUSH PRIVILEGES;


2、修改主庫配置文件並重啓數據庫(根據實際添加server-id與binlog-do-db參數,其中server-id是MySQL 在主從環境下的唯一標誌符,給個任意數字,注意不能和局域網內其他機器重複;binlog-do-db是要同步的數據庫名,當從機連上主機後,只有這裏配置的數據庫纔會被同步,其他的不會被同步)


[root@master]# vi /etc/my.cnf
[mysqld]
server-id = 129
binlog-do-db = sidname
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
重啓數據庫服務
[root@master]# systemctl stop mysqld
[root@master]# systemctl start mysqld


3、確認同步的賬號已經添加及查看timeout時間以便足夠用於備份數據庫


[root@master]# mysql -uroot -p
Enter password:
mysql> select user,host from mysql.user;
mysql> show variables like '%timeout%';


4、對數據庫鎖表只讀
mysql> flush tables with read lock;
5、查看當前主庫狀態並記錄當前二進制日誌名和偏移量master_log_file(File)與master_log_pos(Position)值
mysql> show master status;
CentOS7.X安裝部署mysql5.7主從環境
6、在當前shell連接不斷開的情況,再新建shell窗口2連接主庫,操作備份數據庫並再次確認當前二進制日誌名和偏移量master_log_file(File)與master_log_pos(Position)值是否有變化
Shell窗口2:



[root@master]# mysqldump --set-gtid-purged=off -uroot -p -A -B |gzip > /tmp/mysqlbackupdate +%F.sql.gz
[root@master]# mysql -uroot -p -e "show master status"


7、回到shell窗口1上執行解鎖數據庫:
mysql> unlock tables;
8、將/tmp/mysqlbackupdate +%F.sql.gz下載或通過scp等方式拷貝到從庫機器上
至此,完成主庫的【鎖表】---【備份全庫+記錄日誌名與偏移量】---【表解鎖】操作

3.2 從庫配置
 從機的配置分四個步驟
1、修改從庫配置文件(根據實際添加server-id參數,server-id是MySQL 在主從環境下的唯一標誌符,給個任意數字,注意不能和局域網內其他機器重複)


[root@slave]# vi /etc/my.cnf
[mysqld]
server-id = 130
read_only = 1 #從庫開啓只讀模式
master_info_repository = table
relay_log_info_repository = table
replicate-do-db = sidname
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
重啓數據庫服務
[root@slave]# systemctl stop mysqld
[root@slave]# systemctl start mysqld


2、登錄從庫,並將主庫備份的數據庫解壓


[root@slave]# cd /tmp
[root@slave]# gzip -d mysqlbackupdate +%F.sql.gz


3、如果從庫已經正在運行同步,需要先停止同步


[root@slave]# mysql -uroot -p -e "stop slave;"
4、操作還原數據庫
[root@slave]# mysql -uroot -p < /tmp/mysqlbackupdate +%F.sql


5、使用命令來配置主從庫同步(這裏配置了主庫地址192.168.8.129、端口3306以及從庫登錄主庫的用戶名slave和密碼密碼,注意master_log_filet(File)和master_log_pos(Position)兩個參數要和 master 中的保持一致)


mysql> change master to master_host='192.168.8.129',master_port=3306,master_user='slave',master_password='密碼',master_log_file='mysql-bin.000002',master_log_pos=234358702,master_connect_retry=30;


6、啓動 slave 進程並查看從機狀態


mysql> start slave;
mysql> show slave status\G;
mysql> show databases;


查看 slave 的狀態主要是下面兩項值都要爲爲 YES,則表示配置正確
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
CentOS7.X安裝部署mysql5.7主從環境
至此,配置完成,主機創建庫,添加數據,從機會自動同步。
 主庫查看集羣狀態:


mysql> show master status\G;
mysql> show slave hosts;
 顯示主從當前所有連接的工作狀態
mysql> show processlist \G;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章