基本設置
sed -i 's/SELINUX=enforcing/SELinux=disabled/g' /etc/selinux/config
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eno16777984 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
MYSQL5.7編譯安裝
tar xvf mysql-5.7.20.tar.gz
tar xvf boost_1_59_0.tar.gz
yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake
mkdir /usr/local/boost
cp -r boost_1_59_0 /usr/local/boost/
groupadd mysql
useradd -r -g mysql -s /bin/false -M mysql
mkdir -p /usr/local/mysql /usr/local/mysql/{data,logs,pids}
chown -R mysql:mysql /usr/local/mysql/
cd /opt/mysql-5.7.20
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
make
make install
echo "export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH" >> /etc/profile
source /etc/profile
初始化數據庫
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
### --initialize-insecure 表示不生成密碼
開機啓動項設置
cp /opt/mysql-5.7.20/support-files/mysql.server /etc/init.d/mysqld
chmod a=x /etc/init.d/mysql
chkconfig --add mysqld
chkconfig mysqld on
vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid
[client]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
!includedir /etc/my.cnf.d
touch /usr/local/mysql/logs/mysqld.log
touch /usr/local/mysql/pids/mysqld.pid
chown mysql.mysql -R /usr/local/mysql/
注:報錯處理{/var/lock/subsys/mysql[FAILED]} 解決方法:rm -rf /var/lock/subsys/mysql
連接mysql
mysql -u root
注:此行如果報錯 ,請查看 /etc/my.cnf是否配置正確
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql;
mysql> select host,user,authentication_string from user;
#5.7以後password 已經沒有了,password改成了authentication_string
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)
設置密碼:
update user set authentication_string =password("overseas") where user='root';
flush privileges;
mysql> exit
mysql -uroot -p
Enter password:
配置mysql支持遠程連接
mysql> use mysql
mysql> update user set Host='%' where user='root';
mysql> flush privileges;
配置主主
master1:172.17.2.122
master2:172.17.2.123
master配置
/etc/my.cnf
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1
slave配置
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 2
注:master1和master2只有server-id不同和 auto-increment-offset不同。
mysql中有自增長字段,在做數據庫的主主同步時需要設置自增長的兩個相關配置:auto_increment_offset和auto_increment_increment。
auto-increment-increment表示自增長字段每次遞增的量,其默認值是1。它的值應設爲整個結構中服務器的總數,本案例用到兩臺服務器,所以值設爲2。
auto-increment-offset是用來設定數據庫中自動增長的起點(即初始值),因爲這兩能服務器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺服務器數據同步時出現主鍵衝突,
注:可以在my.cnf文件中添加“binlog_do_db=數據庫名”配置項(可以添加多個)來指定要同步的數據庫
在master1主機上創建授權賬戶,允許在master1(172.17.2.123)主機上連接
mysql> grant replication slave on *.* to 'syn'@'172.17.2.123' identified by 'syn123';
flush privileges;
查看binlog狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
在master2主機上創建授權賬戶,允許在master1(172.17.2.122)主機上連接
mysql>change master to master_host='172.17.2.122',master_user='syn',master_password='syn123',master_log_file='mysql-bin.000002 ',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.2.122
Master_User: syn
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000004
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
****************************************************
注:取消命令爲
mysql> stop slave;
mysql> change master to master_host='';
****************************************************
查看master2的當前binlog狀態信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 601 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
在master2主機上創建授權賬戶,允許在master1(172.17.2.122)主機上連接
grant replication slave on *.* to 'syn'@'172.17.2.122' identified by 'syn123';
在master1上將master2設爲自已的主服務器並開啓slave功能。
mysql>change master to master_host='172.17.2.123',master_user='syn',master_password='syn123',master_log_file='mysql-bin.000002 ',master_log_pos=601;
mysql>flush privileges;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.2.122
Master_User: syn
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
--------------------------------------------------------------------------
備註:Slave_IO_Running和Slave_SQL_Running都爲yes才表示同步成功。
Slave_IO_Running=NO
需要先
stop slave;
reset slave;
重新啓動start slave;
-------------------------------------------------------------------------
驗證主主同步
在master1上創建要同步的數據庫名test_db,並在測試db中創建一張測試表如tab
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> create table tab(id int, name varchar(30));
mysql> use test_db;
Database changed
在master2中查看是否同步,並且在測試db測試tab中插入數據
mysql> insert into tab(id,name) values (1,'test');
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
查看master1主機是否同步了master2上的數據變化
mysql> select * from tab;
+------+------+
| id | name |
+------+------+
| 1 | test |
+------+------+
1 row in set (0.00 sec)
現在任何一臺MySQL上更新數據都會同步到另一臺MySQL,MySQL同步完成。
keepalived 安裝配置
安裝依賴包
yum install -y gcc openssl-devel
解壓keepalived軟件包
[root@wanda-portal-test1 opt]# tar xvf keepalived-1.3.6
編譯安裝
[root@wanda-portal-test1 opt]# cd keepalived-1.3.6
[root@wanda-portal-test1 keepalived-1.3.6]# ./configure
[root@wanda-portal-test1 keepalived-1.3.6]# make & make install
[root@wanda-portal-test1 keepalived-1.3.6]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@wanda-portal-test1 keepalived-1.3.6]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@wanda-portal-test1 keepalived-1.3.6]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@wanda-portal-test1 keepalived-1.3.6]# mkdir /etc/keepalived/
[root@wanda-portal-test1 keepalived-1.3.6]# cp -a /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
配置keepalived
MASTER 配置
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server mail.sinoi.com.cn
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eno16777984
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.17.2.120/16
}
}
[root@wanda-portal-test1 keepalived]# scp keepalived.conf [email protected]:/etc/keepalived/
BACKUP 配置
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server mail.sinoi.com.cn
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777984
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.17.2.120/16
}
}
[root@wanda-portal-test1 keepalived]# systemctl enable keepalived
[root@wanda-portal-test1 keepalived]# systemctl start keepalived