一:在系统上先安装默认的实例
安装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文件)位置,可自己指定