1. 程式人生 > 其它 >MySQL-5.6安裝部署及多例項主從

MySQL-5.6安裝部署及多例項主從

一、需求

1.配置多例項資料庫
2.做多例項的主從同步
3.做多臺伺服器的主從同步

二、MySQL-5.6二進位制安裝(自定義目錄安裝)

[root@db03 ~]# mkdir /service
[root@db03 ~]# cd /service
 
#解除安裝mariadb
[root@db03 /service]# yum remove -y mariadb-libs
 
#建立mysql使用者
[root@db03 /service]# useradd mysql
 
#安裝依賴
[root@db03 /service]# yum install -y ncurses-devel libaio-devel cmake glibc autoconf gcc-c++

#下載
[root@db03 /service]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
[root@db03 ~]# mv mysql-5.6.42-linux-glibc2.12-x86_64 /service/mysql-5.6.42
[root@db03 ~]# ln -s /service/mysql-5.6.42 /service/mysql

#拷貝啟動檔案和配置檔案
[root@db03 ~]# cd /service/mysql/support-files/
[root@db03 /service/mysql/support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite '/etc/my.cnf'? y
[root@db03 /service/mysql/support-files]# cp mysql.server /etc/init.d/mysqld

#初始化
[root@db03 ~]# cd /service/mysql/scripts/
[root@db03 /service/mysql/scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data

#配置systemd管理
[root@db03 ~]# vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/service/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

[root@db03 ~]# systemctl daemon-reload

#啟動資料庫
#1.使用system啟動
[root@db03 ~]# systemctl start mysqld
	#檢視程序啟動失敗,沒有任何報錯

#2.使用mysqld啟動指令碼啟動
[root@db03 ~]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 244: my_print_defaults: command not found
/etc/init.d/mysqld: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)'
	#原因:二進位制的包是原始碼包已經生成編譯安裝完成的,在cmake階段已經指定了所有的目錄都是/usr/local/mysql,所以啟動時所有程式都去找/usr/local/mysql目錄,沒有該目錄,所以啟動失敗
	
#3.解決啟動問題
	1)方法一:做軟連線
	[root@db03 ~]# ln -s /service/mysql /usr/local/mysql
	
	2)方法二:修改啟動檔案
	[root@db03 ~]# vim /etc/init.d/mysqld 
	basedir=/service/mysql
	datadir=/service/mysql/data
	
#4.再次測試啟動
[root@db03 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
#或者
[root@db03 ~]# systemctl start mysqld

#設定環境變數
[root@db03 ~]# vim /etc/profile.d/mysql.sh
export PATH=/service/mysql/bin:$PATH

[root@db02 ~]# source /etc/profile

三、配置多例項

[root@db01 ~]# cd /usr/local/
[root@db01 /usr/local]# mkdir {3307,3308,3309}

#配置多例項配置檔案
[root@db01 /usr/local]# vim 3307/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3307/data
port=3307
socket=/usr/local/3307/data/mysql.sock
server_id=7
log-error=/usr/local/3307/data/mysql.err

[root@db01 /usr/local]# cat 3308/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3308/data
port=3308
socket=/usr/local/3308/data/mysql.sock
server_id=8
log-error=/usr/local/3308/data/mysql.err

[root@db01 /usr/local]# cat 3309/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/3309/data
port=3309
socket=/usr/local/3309/data/mysql.sock
server_id=9
log-error=/usr/local/3309/data/mysql.err

#初始化多例項
[root@db01 /usr/local]# cd mysql/scripts/
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3307/data
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3308/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3308/data
[root@db01 /usr/local/mysql/scripts]# ./mysql_install_db --defaults-file=/usr/local/3309/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/3309/data

#檢視是否生成檔案
[root@db01 /usr/local]# tree -L 2 330*
3307
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf
3308
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf
3309
├── data
│ ├── auto.cnf
│ ├── db01.pid
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── mysql
│ ├── mysql.err
│ ├── performance_schema
│ └── test
└── my.cnf

[root@db01 /usr/local]# chown -R mysql.mysql 330*

#啟動多例項
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3307/my.cnf &
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3308/my.cnf &
[root@db01 ~]# mysqld_safe --defaults-file=/usr/local/3309/my.cnf &

#停止多例項
[root@db01 ~]# mysqladmin -S /usr/local/3307/data/mysql.sock shutdown

#驗證啟動
[root@db01 /usr/local]# netstat -lntp | grep 330
tcp6       0      0 :::3306                 :::*                    LISTEN      7542/mysqld      
tcp6       0      0 :::3307                 :::*                    LISTEN      8429/mysqld         
tcp6       0      0 :::3308                 :::*                    LISTEN      7876/mysqld         
tcp6       0      0 :::3309                 :::*                    LISTEN      8040/mysqld

#登入驗證多例項
[root@db01 ~]# mysql -uroot -S /usr/local/3307/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 7     |
+---------------+-------+
[root@db01 ~]# mysql -uroot -S /usr/local/3308/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 8     |
+---------------+-------+
[root@db01 ~]# mysql -uroot -S /usr/local/3309/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 9     |
+---------------+-------+

#多例項設定密碼
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3307/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3308/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db01 ~]# mysqladmin -uroot password -S /usr/local/3309/data/mysql.sock
New password: 123
Confirm new password: 123

#配置簡單連線資料庫多例項
[root@db01 ~]# cat /usr/bin/mysql3307
mysql -uroot -p123 -S /usr/local/3307/data/mysql.sock
[root@db01 ~]# cat /usr/bin/mysql3308
mysql -uroot -p123 -S /usr/local/3308/data/mysql.sock
[root@db01 ~]# cat /usr/bin/mysql3309
mysql -uroot -p123 -S /usr/local/3309/data/mysql.sock

[root@db01 ~]# chmod +x /usr/bin/mysql*

#直接使用命令連線
[root@db01 ~]# mysql3307
[root@db01 ~]# mysql3308
[root@db01 ~]# mysql3309

四、資料庫多例項主從

1.配置主庫

#配置主庫的binlog
[root@db01 /usr/local]# cat 3307/my.cnf 
..... .......
log_bin=/usr/local/3307/data/mysql-bin

[root@db01 /usr/local]# mysqladmin -uroot -p123 -S /usr/local/3307/data/mysql.sock shutdown
[root@db01 /usr/local]# mysqld_safe --defaults-file=/usr/local/3307/my.cnf &

#主庫授權主從的使用者
[root@db01 /usr/local]# mysql3307

mysql> grant replication slave on *.* to zzc@'localhost' identified by '123';
Query OK, 0 rows affected (0.07 sec)

#主庫檢視binlog資訊
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysql-sbin.000001 |      736 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.配置從庫同步主庫


[root@db01 /usr/local]# mysql3308

mysql> change master to
    -> master_host='127.0.0.1',
    -> master_port=3307,
    -> master_user='zzc',
    -> master_password='123',
    -> master_log_file='mysql-sbin.000001',
    -> master_log_pos=736;

#啟動主從同步
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: 127.0.0.1
                  Master_User: zzc
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-sbin.000001
          Read_Master_Log_Pos: 736
               Relay_Log_File: db01-relay-bin.000002
                Relay_Log_Pos: 284
        Relay_Master_Log_File: mysql-sbin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes



[root@db01 ~]# mysql3309

mysql> change master to
    -> master_host='127.0.0.1',
    -> master_port=3307,
    -> master_user='zzc',
    -> master_password='123',
    -> master_log_file='mysql-sbin.000001',
    -> master_log_pos=1120;
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;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: zzc
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-sbin.000001
          Read_Master_Log_Pos: 1120
               Relay_Log_File: db01-relay-bin.000002
                Relay_Log_Pos: 284
        Relay_Master_Log_File: mysql-sbin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes