NSD DBA2 DAY03
1 案例1:配置MySQL多實例
1.1 問題
- 在主機192.168.4.56上,配置第1個MySQL實例
- 實例名稱mysql1、端口3307
- 數據庫目錄/data3307、pid文件mysql1.pid
- 錯誤日志mysql1.err
- 在主機192.168.4.56上,配置第2個MySQL實例
- 實例名稱mysql2、端口3308
- 數據庫目錄/data3308、pid文件mysql2.pid
- 錯誤日志mysql2.err
步驟一:配置多實例(192.168.4.56上面操作)
什么是多實例:
在一台物理主機上運行多個數據庫服務,可以節約運維成本,提高硬件利用率
1)解壓軟件、修改目錄名
- [root@mysql ~]# cd mysql/
- [root@mysql mysql]# ls
- mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
- [root@mysql mysql]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
- [root@mysql mysql]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
2)調整PATH變量
- [root@mysql mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" \
- >> /etc/profile
- [root@mysql mysql]# source /etc/profile
- [root@mysql mysql]# echo $PATH
- /usr/local/mysql/bin:/usr/local/mycat/bin:/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
3)編輯主配置文件/etc/my.cnf
每個實例要有獨立的數據庫目錄、監聽端口號、實例名稱和獨立的sock文件
- [mysqld_multi] //啟用多實例
- mysqld = /usr/local/mysql/bin/mysqld_safe //指定進程文件路徑
- mysqladmin = /usr/local/mysql/bin/mysqladmin //指定管理命令路徑
- user = root //指定進程用戶
- [mysqld1] //實例進程名稱
- port=3307 //端口號
- datadir=/data3307 //數據庫目錄 ,要手動創建
- socket=/data3307/mysqld.sock //指定sock文件的路徑和名稱
- pid-file=/data3307/mysql1.pid //進程pid號文件位置
- log-error=/data3307/mysql1.err //錯誤日志位置
- [mysqld2]
- port=3308
- datadir=/data3308
- socket=/data3308/mysqld.sock
- pid-file=/data3308/mysql2.pid
- log-error=/data3308/mysql2.err
4)創建數據庫目錄
- [root@mysql mysql]# mkdir -p /data3307
- [root@mysql mysql]# mkdir -p /data3308
5)創建進程運行的所有者和組 mysql
- [root@mysql mysql]# useradd mysql
- [root@mysql mysql]# chown mysql:mysql /data*
6)初始化授權庫
- [root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql
- --datadir=/data3307 --initialize
- ...
- 2018-09-26T07:07:33.443378Z 1 [Note] A temporary password is generated for root@localhost: 7L?Vi!dGKmgu //root用戶登錄的初始化密碼
- [root@mysql mysql]# mysqld --user=mysql --basedir=/usr/local/mysql
- --datadir=/data3308 --initialize
- ...
- 2018-09-26T07:08:07.770289Z 1 [Note] A temporary password is generated for root@localhost: kC)BbyUp1a-b //root用戶登錄的初始化密碼
7)啟動多實例
- [root@mysql mysql]# mysqld_multi start 1 //1為實例編號
- [root@mysql mysql]# mysqld_multi start 2
8)查看端口
- [root@mysql mysql]# netstat -utnlp | grep :3307
- tcp6 0 0 :::3307 :::* LISTEN 21009/mysqld
- [root@mysql mysql]# netstat -utnlp | grep :3308
- tcp6 0 0 :::3308 :::* LISTEN 21177/mysqld
- [root@mysql mysql]# ps -C mysqld
- PID TTY TIME CMD
- 21009 pts/1 00:00:00 mysqld
- 21177 pts/1 00:00:00 mysqld
9)訪問多實例
使用初始化密碼登錄多實例1
- [root@mysql mysql]# mysql -u root -p'7L?Vi!dGKmgu' -S /data3307/mysqld.sock
- mysql> alter user root@"localhost" identified by '123456'; //修改密碼
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
使用初始化密碼登錄多實例2
- [root@mysql bin]# mysql -u root -p'kC)BbyUp1a-b' -S /data3307/mysqld.sock
- mysql> alter user root@"localhost" identified by '123456'; //修改密碼
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
10)創建庫
- mysql> create database db1;
- Query OK, 1 row affected (0.00 sec)
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | db1 |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 5 rows in set (0.00 sec)
11)停止啟動的實例服務
mysqld_multi --user=root --password=密碼 stop 實例編號
- [root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 1
- [root@mysql mysql]# netstat -utnlp | grep :3307 //查看沒有端口
- [root@mysql mysql]# mysqld_multi --user=root --password=123456 stop 2
- [root@mysql mysql]# netstat -utnlp | grep :3308 //查看沒有端口
- [root@mysql mysql]# mysql -uroot -p123456 -S /data3307/mysqld.sock
- //拒絕連接
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data3307/mysqld.sock' (2)
2 案例2:准備MHA集群環境
2.1 問題
- 准備6台虛擬機,並按照本節規划配置好IP參數
- 在這些虛擬機之間實現SSH免密登錄
- 在相應節點上安裝好MHA相關的軟件包
2.2 方案
使用6台RHEL 7虛擬機,如圖-1所示。准備集群環境,安裝依賴包,授權用戶,配置ssh密鑰對認證登陸,所有節點之間互相以root秘鑰對認證登錄,管理主機以root密鑰對認證登錄所有數據節點主機,配置mha集群。

圖-1
IP規划,如圖-2所示:

圖-2
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一: 准備集群環境
1)修改主機名,配置IP(其余幾台請按照圖-2修改IP和主機名,這里以master51為例)
- [root@localhost ~]# echo master51 > /etc/hostname
- [root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.51/24 connection.autoconnect yes
- [root@localhost ~]# nmcli connection up eth0
2在所有主機上安裝Perl依賴包(51-56操作)
- [root@master51 ~]# cd mysql/mha-soft-student/
- [root@master51 ~]# yum -y install perl-*.rpm
3)在所有數據庫服務器上安裝mha-node包(51-55操作)
- [root@master51 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
- [root@master51 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
- Preparing... ################################# [100%]
- Updating / installing...
- 1:mha4mysql-node-0.56-0.el6 ################################# [100%]
4)在管理主機上安裝mha_node 和 mha-manager包(56操作)
- [root@mgm56 mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
- [root@mgm56 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
- Preparing... ################################# [100%]
- Updating / installing...
- 1:mha4mysql-node-0.56-0.el6 ################################# [100%]
- [root@mgm56 mha-soft-student]# yum -y install perl-ExtUtils-* perl-CPAN-*
- [root@mgm56 mha-soft-student]# tar -zxf mha4mysql-manager-0.56.tar.gz
- [root@mgm56 mha-soft-student]# cd mha4mysql-manager-0.56/
- [root@mgm56 mha4mysql-manager-0.56]# perl Makefile.PL
- *** Module::AutoInstall version 1.03
- *** Checking for Perl dependencies...
- [Core Features]
- - DBI ...loaded. (1.627)
- - DBD::mysql ...loaded. (4.023)
- - Time::HiRes ...loaded. (1.9725)
- - Config::Tiny ...loaded. (2.14)
- - Log::Dispatch ...loaded. (2.41)
- - Parallel::ForkManager ...loaded. (1.18)
- - MHA::NodeConst ...loaded. (0.56)
- *** Module::AutoInstall configuration finished. //配置完成
- Checking if your kit is complete...
- Looks good
- Writing Makefile for mha4mysql::manager
- Writing MYMETA.yml and MYMETA.json
- [root@mgm56 mha4mysql-manager-0.56]# make
- [root@mgm56 mha4mysql-manager-0.56]# make install
步驟二: 配置ssh密鑰對認證登陸
1)所有節點之間可以互相以ssh密鑰對方式認證登陸以(以51為例)
- [root@master51 mha-soft-student]# ssh-keygen
- [root@master51 mha-soft-student]# ssh-copy-id 192.168.4.52
- //除了傳給52外,53,54,55也要傳,52-55主機也是一樣的
6)配置56主機 無密碼ssh登錄所有數據節點主機
- [root@mgm56 mha4mysql-manager-0.56]# ssh-keygen
- [root@mgm56 mha4mysql-manager-0.56]# ssh-copy-id 192.168.4.51
- //除傳給51外,還要傳給52-55
3 案例3:配置MHA集群環境
3.1 問題
- 配置主節點 master51
- 配置兩個備用主節點 master52、master53
- 配置兩個從節點 slave54、slave55
- 配置管理節點 mgm56
3.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:配置mha集群環境
1)安裝數據庫(51-55同樣操作,以51為例)
- [root@master51 ~]# cd /root/mysql
- [root@master51 mysql]# tar -xf mysql-5.7.17.tar
- [root@master51 mysql]# yum -y install perl-JSON
- [root@master51 mysql]# rpm -Uvh mysql-community-*.rpm
- [root@master51 mysql]# rpm -qa | grep -i mysql
2)master51 數據庫服務器配置文件
- [root@master51 mysql]# vim /etc/my.cnf
- plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
- rpl-semi-sync-master-enabled = 1
- rpl-semi-sync-slave-enabled = 1
- server_id=51
- log-bin=master51
- binlog-format="mixed"
- [root@master51 mysql]# systemctl restart mysqld
- [root@master51 mysql]# mysql -u root -p123456
- mysql> set global relay_log_purge=off; //不自動刪除本機的中繼日志文件
- Query OK, 0 rows affected (0.00 sec)
- mysql> grant replication slave on *.* to repluser@"%" identified by "123456";
- //添加主從同步授權用戶
- Query OK, 0 rows affected, 1 warning (10.01 sec)
- mysql> show master status;
- +-----------------+----------+--------------+------------------+-------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +-----------------+----------+--------------+------------------+--------------+
- | master51.000003 | 441 | | | |
- +-----------------+----------+--------------+------------------+--------------+
- 1 row in set (0.00 sec)
3)master52數據庫服務器配置文件
- [root@master52 mysql]# vim /etc/my.cnf
- plugin-load ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
- rpl-semi-sync-master-enabled = 1
- rpl-semi-sync-slave-enabled = 1
- server_id=52
- log-bin=master52
- binlog-format="mixed"
- [root@master52 mysql]# systemctl restart mysqld
- [root@master52 mysql]# mysql -u root -p123456
- mysql> set global relay_log_purge=off;
- mysql> change master to
- -> master_host="192.168.4.51",
- -> master_user="repluser",
- -> master_password="123456",
- -> master_log_file="master51.000003",
- -> master_log_pos=441;
- Query OK, 0 rows affected, 2 warnings (0.01 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.01 sec)
- mysql> show slave status\G;
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- ...
4)master53數據庫服務器配置文件
- [root@master53 mysql]# vim /etc/my.cnf
- plugin-load ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
- rpl-semi-sync-master-enabled = 1
- rpl-semi-sync-slave-enabled = 1
- server_id=53
- log-bin=master53
- binlog-format="mixed"
- [root@master53 mysql]# systemctl restart mysqld
- [root@master53 mysql]# mysql -u root -p123456
- mysql> set global relay_log_purge=off;
- Query OK, 0 rows affected (0.00 sec)
- mysql> change master to
- -> master_host="192.168.4.51",
- -> master_user="repluser",
- -> master_password="123456",
- -> master_log_file="master51.000003",
- -> master_log_pos=441;
- Query OK, 0 rows affected, 2 warnings (0.01 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show slave status\G;
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- ...
5)slave54 數據庫服務器配置文件
- [root@slave54 mysql]# vim /etc/my.cnf
- server_id=54
- [root@master54 mysql]# systemctl restart mysqld
- [root@master54 mysql]# mysql -u root -p123456
- mysql> change master to
- -> master_host="192.168.4.51",
- -> master_user="repluser",
- -> master_password="123456",
- -> master_log_file="master51.000003",
- -> master_log_pos=441;
- Query OK, 0 rows affected, 2 warnings (0.01 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show slave status\G;
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- ...
6)slave55 數據庫服務器配置文件
- [root@slave55 mysql]# vim /etc/my.cnf
- server_id=55
- [root@master55 mysql]# systemctl restart mysqld
- [root@master55 mysql]# mysql -u root -p123456
- mysql> change master to
- -> master_host="192.168.4.51",
- -> master_user="repluser",
- -> master_password="123456",
- -> master_log_file="master51.000003",
- -> master_log_pos=441;
- Query OK, 0 rows affected, 2 warnings (0.01 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show slave status\G;
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- ...
7)配置管理主機4.56
- [root@mgm56 ~]# cd mysql/mha-soft-student/mha4mysql-manager-0.56/
- [root@mgm56 mha4mysql-manager-0.56]# cp bin/* /usr/local/bin/
- //提示覆蓋,說明安裝的時候有,沒有可以拷貝過來
- [root@mgm56 mha4mysql-manager-0.56]# mkdir /etc/mha_manager //創建工作目錄
- [root@mgm56 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha_manager
- //建立樣板文件
- [root@mgm56 mha4mysql-manager-0.56]# vim /etc/mha_manager/app1.cnf
- //編輯主配置文件app1.cnf
- [server default]
- manager_workdir=/etc/mha_manager
- manager_log=/etc/mha_manager/manager.log
- master_ip_failover_script=/usr/local/bin/master_ip_failover
- ssh_user=root
- ssh_port=22
- repl_user=repluser
- repl_password=123456
- user=root
- password=123456
- [server1]
- hostname=192.168.4.51
- port=3306
- [server2]
- hostname=192.168.4.52
- port=3306
- candidate_master=1
- [server3]
- hostname=192.168.4.53
- port=3306
- candidate_master=1
- [server4]
- hostname=192.168.4.54
- no_master=1
- [server5]
- hostname=192.168.4.55
- no_master=1
- [root@mgm56 mha4mysql-manager-0.56]# cp samples/scripts/master_ip_failover
- /usr/local/bin/ //創建故障切換的腳本