一:在系統上先安裝默認的實例
安裝master節點
apt update
apt install mysql-server -y
二:安裝第二個實例 (端口:3307)
1:創建實例存放的目錄
mkdir /data/mysql/3307 -p
mkdir /data/mysql/3307/conf -p
mkdir /data/mysql/3307/mysqldata -p
2:copy配置文件
cp /etc/mysql/mysql.conf.d/mysqld.cnf /data/mysql/3307/conf/3307.cnf
3:修改配置文件
vi /data/mysql/3307/conf/3307.cnf
socket = /data/mysql/3307/mysqld.sock
pid-file = /data/mysql/3307/mysqld.pid
socket = /data/mysql/3307/mysqld.sock
port = 3307
datadir = /data/mysql/3307/mysqldata
log_error = /data/mysql/3307/error.log
4:配置 apparmor
vi /etc/apparmor.d/usr.sbin.mysqld
找到:# Allow data dir access 在其中添加以下內容
/data/mysql/3307/ r,
/data/mysql/3307/** rwk,
重啓apparmor服務
systemctl restart apparmor
5:配置權限
chown -R mysql:mysql /data/mysql/3307
find /data/mysql/3307 -type d | xargs chmod 755
find /data/mysql/3307 -type f | xargs chmod 644
6:初始化3307實例
mysqld --defaults-file=/data/mysql/3307/conf/3307.cnf --initialize --user=mysql --explicit_defaults_for_timestamp=1
7:初始化實例
7.1:無密碼啓動mysql3307實例
mysqld_safe --defaults-file=/data/mysql/3307/conf/3307.cnf --skip-grant-tables &
7.2:登錄3307端口的實例
mysql -uroot -S /data/mysql/3307/mysqld.sock
7.3:登錄後修改root密碼
> USE mysql;
> UPDATE user SET authentication_string=password('123456789');
> FLUSH PRIVILEGES;
> exit;
注:登出一次再次登錄,執行下面的命令纔可以正常停止服務
# mysql -uroot -S /data/mysql/3307/mysqld.sock
> ALTER user user() IDENTIFIED by '123456789';
8:停止mysql3307實例
mysqladmin -uroot -p -S /data/mysql/3307/mysqld.sock shutdown
9:啓動mysql3307實例
mysqld_safe --defaults-file=/data/mysql/3307/conf/3307.cnf &
查看啓動是否正常
ps -ef|grep mysql|grep 3307
netstat -nltp|grep 3307
登錄實例:
mysql -uroot -S /data/mysql/3307/mysqld.sock -p
三:實現主從複製 (mysql主從搭建後默認同步所有庫)
1:在主庫上創建用於同步數據的賬戶
GRANT REPLICATION SLAVE ON *.* to 'cpuser'@'127.0.0.1' identified by 'CpPassw0rd';
FLUSH PRIVILEGES;
2:配置主庫: /etc/mysql/mysql.conf.d/mysqld.cnf
2.1:先備份一份文件:cp /etc/mysql/mysql.conf.d/mysqld.cnf{,.bak}
2.2:修改主庫配置文件
vi /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
重啓master的mysql服務
2.3:查看bin_log是否開啓
show global variables like '%log_bin%';
注:---------------------------------------------
replicate-do-db 設定需要複製的數據庫
replicate-ignore-db 設定需要忽略的複製數據庫
replicate-do-table 設定需要複製的表
replicate-ignore-table 設定需要忽略的複製表
2.4:查看主庫的狀態
show master status;
3:從庫配置
3.1:修改配置文件:/data/mysql/3307/conf/3307.cnf
server-id = 2
3.2:然後執行下面的命令同步當前信息
change master to master_host='127.0.0.1', master_user='cpuser', master_password='CpPassw0rd',master_log_file='mysql-bin.000002', master_log_pos=154;
3.3:開啓同步
start slave;
3.4:查看主從同步情況
show slave status\G;
4:測試數據庫的同步
4.1:在上庫上創建一個數據庫,看從庫是否創建
create database test_1;
4.2:在主庫創建一個用戶,看從庫是否也會創建
grant all privileges on test_1.* to "testuser"@"%" identified by "12345678";
flush privileges;
4.3:在從節點上查看
mysql -u testuser -h 127.0.0.1 -S /data/mysql/3307/mysqld.sock -p
5:配置從庫只讀
set global read_only=1; # 設置普通賬號的只讀模式
set global read_only=0; # 取消普通賬號的只讀模式
GRANT all privileges ON . to 'cp'@'%' identified by '123456789';
FLUSH PRIVILEGES;
有數據的部分:
mysqldump -uroot -p --all-databases --lock-all-tables > master_db.sql
說明:
-u :用戶名
-p :示密碼
--all-databases :導出所有數據庫
--lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改
~/master_db.sql :導出的備份數據(sql文件)位置,可自己指定