官网:https://dev.mysql.com/downloads/mysql/
在线下载或者下载到本地再上传
cd /usr/local
准备wget下载工具:
yum install wget -y
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-el7-x86_64.tar.gz
tar -zxvf mysql-8.0.33-el7-x86_64.tar.gz -C /usr/local/
mv mysql-8.0.33-el7-x86_64 mysql
mkdir mysql/data
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql/
chmod -R 755 /usr/local/mysql
进入MySQL的bin目录
cd mysql/bin
初始化并得到密码
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
./mysqld: error while loading shared libraries: libnuma.so.1: cannot
open shared object file: No such file or directory
报错,缺依赖::::
yum install -y libaio
yum -y install numactl
再初始化
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
vi /etc/my.cnf
[client]
#password = your_password
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=1
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=0
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql/data
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
/usr/local/mysql/support-files/mysql.server start
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
service mysql restart
mysql -u root -p
输入上面初始化获取的初始密码
改密:
alter user 'root'@'localhost' identified by '123456';
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
由于这里将localhost改为了%,所以后续这样就行
alter user ‘root’@‘%’ identified by ‘123456’;
flush privileges;
服务器上记得放开端口
开放指定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
–zone #作用域
–add-port=3306/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
然后退出MySQL使用 exit,等把从服务器搞好再创建表测试
exit
将服务文件拷贝到init.d下,并重命名为mysqld
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
赋予可执行权限
chmod +x /etc/init.d/mysqld
添加服务
chkconfig --add mysqld
显示服务列表
chkconfig --list
注:如果看到mysql的服务,并且3,4,5都是开的话则成功,如果是关,则
chkconfig --level 345 mysqld on
安装流程和上面一致,只有配置有细微差别
vi /etc/my.cnf
# 服务器唯一id,默认为1,值范围为1~2^32?1. ;主数据库和从数据库的server-id不能重复
server-id=2
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=1
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
登录主服务器
MySQL
mysql -uroot -p
授予主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
show master status;
登录从库服务器
MySQL
mysql -uroot -p
关联主服务器(注意主服务器的日志文件 和 位置 名称要一致)
8.0.23之后语法(兼容之前的语法)
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.20.20',SOURCE_USER='root',SOURCE_PASSWORD='123456',SOURCE_LOG_FILE='mysql-bin.000003',SOURCE_LOG_POS=369;
8.0.23之前语法
CHANGE REPLICATION MASTER TO MASTER_HOST='*.*.*.*',MASTER_USER='***',MASTER_PASSWORD='**',MASTER_LOG_FILE='**',MASTER_LOG_POS=**;
MASTER_HOST 主库IP地址
MASTER_USER 连接主库用户名
MASTER_PASSWORD 连接主库密码
MASTER_LOG_FILE binlog日志文件名
MASTER_LOG_POS binlog日志文件位置
8.0.22版本之后(兼容之前的命令)
start replica;
8.0.22版本之前
start slave;
show replica status\G;
exit;
一般就在 /mysql/data/auto.cnf 文件里面
vi /usr/local/mysql/data/auto.cnf
随便改一个数(长度固定的,少一个启动就会报错,建议就随机调整一个数就行),ESC :wq 保存退出,然后重启MySQL。
重启MySQL:
service mysql restart
然后再查看同步状态
show replica status\G;
主服务器
新建库、使用库、新建表、插入数据、查询表、查询表数据
CREATE database test;
use test;
CREATE TABLE `tb_user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `tb_user` VALUES (1, 'coisini', '0');
show tables;
select * from tb_user;
use test;
show tables;
select * from tb_user;
总结:
将主库的数据变更同步到从库,保证主从数据一致,可用于数据备份、失败迁移、读写分类、降低单库读写压力。
原理:
主库会把数据变更记录在二进制日志文件binlog中。
从库连接主库,读取binlog日志,并写入自身中继日志relaylog.
slave重做中继日志,将改变反应它自己的数据。
参照下这个本地部署多个MySQL,下面贴出我本地的配置,可以参考一下,
主服务器配置:
[mysqld]
# 设置3307端口
port=3307
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=1
# 主从数据库配置核心部分
# 设置同步的binary log二进制日志文件名前缀,默认为binlog;在MySQL 8.0中,无论是否指定--log bin选项,默认情况下都会启用二进制日志记录,并将log_bin系统变量设置为ON。
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=0
# 需要主从复制的数据库,如多个则重复配置
# binlog-do-db=user_db
# 屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置mysql的安装目录
basedir=F:/MySQL/mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:/MySQL/mysql-8.0.26-winx64/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8mb4
从服务器配置:
[mysqld]
# 登录跳过权限检查
# skip-qrant-tables
# 从服务器设置3308端口
port=3308
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=2
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=1
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
# 设置从服务器mysql的安装目录
basedir=F:/MySQL/mysql-8.0.26-winx64-s1
# 设置从服务器mysql数据库的数据的存放目录
datadir=F:/MySQL/mysql-8.0.26-winx64-s1/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置从服务器mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置从服务器mysql客户端连接服务端时默认使用的端口
port=3308
default-character-set=utf8mb4
步骤都差不多,主要先有两台MySQL,然后配置下主从配置,查询是否同步成功(两个YES),新建库进行测试。
搞定,感谢阅览,希望能对你有帮助~
END