吉林省干部网络培训,优化网站排名的方法,组建一个网站,网站乱码解决办法Mysql8 搭建主从 docker的安装docker-compose的安装安装mysql配置主从在master配置在slave中配置在master中创建同步用户在slave中连接 测试连接测试配置测试数据同步遇到的问题id重复错误执行事务出错#xff0c;跳过错误my.cnf 不删除多余配置的错误可能用到的命令 docker的… Mysql8 搭建主从 docker的安装docker-compose的安装安装mysql配置主从在master配置在slave中配置在master中创建同步用户在slave中连接 测试连接测试配置测试数据同步遇到的问题id重复错误执行事务出错跳过错误my.cnf 不删除多余配置的错误可能用到的命令 docker的安装
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。 Docker CE 即社区免费版Docker EE 即企业版强调安全但需付费使 用。 本文介绍 Docker CE 的安装使用。 移除旧的版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine安装一些必要的系统工具
sudo yum install -y yum-utils device-mapper-persistentdata lvm2添加软件源信息
sudo yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/dockerce.repo更新 yum 缓存
# centos 7
sudo yum makecache fast
# CentOS 8没有fast这个命令
sudo yum makecache安装 Docker-ce
sudo yum -y install docker-ce查看已安装docker版本
docker version启动 Docker 后台服务
sudo systemctl start docker开机启动
sudo systemctl enable docker镜像加速 鉴于国内网络问题后续拉取 Docker 镜像十分缓慢我们可以需要配置加 速器来解决。 可以使用阿里云的docker镜像地址https://7qyk8phi.mirror.aliyuncs.co m 新版的 Docker 使用 /etc/docker/daemon.json Linux没有请新 建。 请在该配置文件中加入 没有该文件的话请先建一个
{
registry-mirrors:
[https://7qyk8phi.mirror.aliyuncs.com]
}重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker检查加速器是否生效 配置加速器之后如果拉取镜像仍然十分缓慢请手动检查加速器配置是 否生效在命令行执行 docker info如果从结果中看到了如下内容说 明配置成功。 Registry Mirrors: https://7qyk8phi.mirror.aliyuncs.com/ docker-compose的安装
#运行此命令以下载 Docker Compose 的当前稳定版本
sudo curl -L
https://github.com/docker/compose/releases/download/1.29.
2/docker-compose-$(uname -s)-$(uname -m) -o
/usr/local/bin/docker-compose
#对二进制文件应用可执行权限
sudo chmod x /usr/local/bin/docker-compose
#测试安装
docker-compose --version
#若有docker-compose version 1.29.2, build 5becea4c则安装成
功安装mysql
在你的home路径下创建一个文件 vim docker-compose.yml 将下列内容复制到该文件中保存改成自己的密码和容器名 然后执行docker-compose up -d 命令 执行 会按照docker-compose.yml文件中的配置进行安装会自动创建好docker 容器 安装完成后 使用 docker ps -a 命令可以查看
vim docker-compose.ymldocker-compose up -ddocker ps -aversion: 3.5services:saber-mysql:image: mysql:8.0container_name: 容器名restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD 密码ports:- 13306:3306volumes:- /home/mysql/data:/var/lib/mysql- /home/mysql/conf.d:/etc/mysql/conf.dsaber-redis:image: redis:7.0.11container_name: 容器名restart: alwaysvolumes:- /home/redis/data:/data- /home/redis/config/:/usr/local/etc/redis/command: redis-server /usr/local/etc/redis/redis.confports:- 16379:6379配置主从
在两台服务器上除以上的操作后可以开始配置主从了首先测试两台服务器是否联通 通过ping命令进行测试
ping 另一台服务器的IP地址 如 ping 121.227.45.33ctrl c 结束 查看结果
在master配置
在msyql容器成功运行后可以通过 docker exec -it mysql容器名bash 进入容器
docker exec -it mysql容器名bash然后登录到mysql mysql -uroot -p密码正常后退出容器 exit 退出mysql ctrl d 可以退出容器
修改master配置文件 ①可以看到mysql的配置映射到了这个路径下但是不是直接修改这个文件而是在这个目录下新建配置文件进行配置 这里是从 /etc/my.cnf 使用find / -name my.cnf 找一下 如果没有这个文件通常是这个目录下复制了一份配置文件过来cp /etc/my.cnf /home/mysql/conf.d/my.cnf
find / -name my.cnf
cp /etc/my.cnf /home/mysql/conf.d/my.cnf②但是启动msyql的时候会报错需要删除掉一些原本不需要的配置
vim my.cnf ③在[mysql]下添加以下配置后重启docker systemctl restart docker 或 mysql容器 docker restart mysql(容器名)使用命令查看配置是否生效
systemctl restart dockerdocker restart mysql(容器名)server_id1
log-binmysql-bin
read-only0
replicate-ignore-dbmysql
replicate-ignore-dbsys
replicate-ignore-dbinformation_schema
replicate-ignore-dbperformance_schema
binlog_formatSTATEMENT
#binlog_formatROW
#binlog_formatMIXED其中 server-id 是 MySQL 服务器的唯一标识符在主从复制中必须唯一 log-bin 是二进制日志文件的名称前缀用于记录所有更改 binlog-do-db 是指定需要复制的数据库名称。
在slave中配置
同msater一样在[mysql]中配置即可重启后查看是否生效
server_id2
log-binmysql-bin
read-only1
log-slave-updates1
replicate-ignore-dbmysql
replicate-ignore-dbsys
replicate-ignore-dbinformation_schema
replicate-ignore-dbperformance_schema其中 server-id 是 MySQL 服务器的唯一标识符在主从复制中必须唯一 relay-log 是中继日志文件的名称前缀用于存储从主服务器接收到的二进制日志信息 log-slave-updates 是指定从服务器记录自己的二进制日志以便后续其他从服务器复制 read-only 是将从服务器设置为只读模式以避免在从服务器上进行写操作。
配置主要是忽略部分系统表的同步, 以及从库开启只读模式.
注: 从库的只读模式只对非 SUPER 用户起作用, 同时不影响主从复制的写功能.
SHOW VARIABLES LIKE server_id; 命令检查从服务器的 server_id 参数是否已设置为不同于主服务器的值。
在master中创建同步用户
上述步骤测试无问题后可以进行同步用户的创建和配置了
登录mysql执行
CREATE USER sxxx% IDENTIFIED BY 你的密码;GRANT REPLICATION SLAVE ON *.* TO sxxx%;GRANT * ON *.* TO sxxx%;FLUSH PRIVILEGES;在slave中连接
登录mysql根据master的情况填写一下命令中的参数在master中的mysql中执行命令 show master status
show master status;CHANGE MASTER TO MASTER_HOSTmaster服务器地址, MASTER_USER同步用户名, MASTER_PASSWORD密码, MASTER_PORT13306端口, MASTER_LOG_FILEmysql-bin.000006看情况, MASTER_LOG_POS 看情况;
示例
CHANGE MASTER TO MASTER_HOST121.228.45.51,MASTER_PORT13306, MASTER_USERsxxxx, MASTER_PASSWORD124444, MASTER_LOG_FILEmysql-bin.000006, MASTER_LOG_POS156;然后执行命令 开启从库
START SLAVE;使用以下命令检查从服务器当前的复制状态
测试连接
测试配置
SHOW SLAVE STATUS\G如果输出中的 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes那么说明主从复制已经成功搭建起来了。
如果发现 status 中有任何错误, 则停止从库同步:
stop slave;排查完原因后, 可能需要重置同步:
reset slave;重新 start slave 后当看到如下显示说明成功了:
如果 Seconds_Behind_Master 字段为 0这表示从服务器与主服务器之间的数据同步是实时的即从服务器已经追上了主服务器。
测试数据同步
Slave_IO_Running 和 Slave_SQL_Running 都为 Yes然后在master中创建库和表以及添加数据在slave中会自动同步
遇到的问题
目前使用docker和docker-compose 安装好了 msysql8 在两台服务器 ,但是在配置主从的时候 不知道在哪里修改配置文件 使slave从库能够从主库中完成同步 目前尝试了docker exec 进入mysql容器内部 临时修改服务id 能够在连接后成功同步连接后的建库和建表操作 但是由于是临时配置的 不太稳定 而且重启后就失效了 不清楚在哪里进行配置 在/etc/my.cnf中配置 不起作用 猜测应该是不应该在这里配置 根据docker-compose.yml中的数据卷映射 到/home/mysql/conf.d 文件 发现是空的 但是/home/mysql/data中的数据映射成功了 目前不清楚在哪里进行配置
还有 好像只能同步连接后的建库建表操作 连接之前的操作和数据怎么同步(未解决以下是说明) 在启动主从复制后如果你没有手动创建数据库和表那么主服务器上新创建的数据库和表会自动被复制到从服务器上。但是如果你已经手动创建了数据库或表那么需要手动将这些数据库和表导入到从服务器上。 需要注意的是在从服务器上执行 SHOW DATABASES; 命令时可能不会立即看到主服务器上新创建的数据库。这是因为默认情况下从服务器会缓存主服务器的 binlog 事件直到执行 START SLAVE; 命令时才开始读取并应用这些事件。如果你想在从服务器上立即看到新创建的数据库可以尝试执行 STOP SLAVE; 和 START SLAVE; 命令以重新启动从服务器的复制进程。 id重复错误
Slave_IO_Running 的状态显示为 “No”并且在 Last_IO_Error 中出现了以下错误提示 Fatal error: The slave I/O thread stops because master and slave haveequal MySQL server ids; these ids must be different for replication towork (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual beforeusing it). 这个错误提示的意思是从服务器和主服务器使用了相同的 MySQL 服务器 ID导致无法进行数据复制。为了解决这个问题需要在从服务器上修改 MySQL 的服务器 ID。
临时设置id
SET GLOBAL server_id 2; 临时设置id检查从服务器的 server_id
SHOW VARIABLES LIKE server_id;执行事务出错跳过错误
从服务器的主从复制状态显示为 “Slave_IO_Running: Yes”但是 “Slave_SQL_Running: No”并且在 Last_SQL_Error 中出现了以下错误提示 Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘ANONYMOUS’ at master log binlog.0 这个错误提示表明在执行事务时出现了错误导致了主从复制的停止。为了解决这个问题你可以尝试以下步骤
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1;
START SLAVE;这里的 1 是指跳过一个错误的 SQL 语句如果有多个错误可以多次执行 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 的命令。
重新配置从服务器的主从复制参数并开始复制进程
CHANGE MASTER TO MASTER_HOST, MASTER_USER, MASTER_PASSWORDyour_password, MASTER_PORT13306, MASTER_LOG_FILEbinlog.000006, MASTER_LOG_POS771;
START SLAVE;永久配置跳过错误 将 错误代码 替换为您希望跳过的特定错误代码。如果要跳过多个错误代码可以使用英文逗号分隔它们例如
slave_skip_errors 1062,1050my.cnf 不删除多余配置的错误 Can’t read dir of ‘/etc/my.cnf.d’ (OS errno 2 - No such file or directory)mysql: [ERROR] Stopped processing the ‘includedir’ directive in file /etc/mysql/conf.d/my.cnf at line 28.mysql: [ERROR] Stopped processing the ‘includedir’ directive in file /etc/mysql/my.cnf at line 29.mysql: [Warning]Using a password on the command line interface can be insecure.ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2) 有几个问题需要解决 /etc/my.cnf.d 目录不存在该错误提示表明 /etc/my.cnf.d 目录不存在。在 CentOS 7的默认安装中MySQL 的配置文件目录通常是 /etc/mysql/conf.d 而不是 /etc/my.cnf.d。请确保您在命令行或配置文件中正确指定了正确的路径。 includedir 指令的处理停止该错误提示表明 MySQL 在处理 /etc/mysql/conf.d/my.cnf 和 /etc/mysql/my.cnf 文件时遇到了问题。可能是由于文件中的某些配置错误导致的。请检查这两个文件的第 28 行和第 29行的内容并确保没有语法错误或其他问题。 无法通过 socket 连接到本地 MySQL 服务器该错误提示表示无法通过 /var/run/mysqld/mysqld.sock文件的 socket 连接到本地的 MySQL 服务器。这可能是由于 MySQL服务器未启动或配置错误导致的。您可以尝试执行以下步骤来解决此问题 检查 MySQL 服务器是否已正确启动。您可以使用 systemctl status mysqld 命令来检查 MySQL 服务器的状态。 如果 MySQL 服务器未启动请使用 systemctl start mysqld 命令启动它。 如果 MySQL服务器已启动但仍无法连接请检查 /etc/my.cnf 或 /etc/mysql/my.cnf 文件中的 socket配置项并确保它与实际的 socket 文件路径匹配。 最后请确保您在命令行中使用密码进行连接时谨慎操作因为这可能存在安全风险。建议使用安全的方式连接到 MySQL 服务器如使用配置文件或环境变量来提供密码。 用户认证方式出错 error connecting to master ‘sxy121.229.41.41:13306’ - retry-time: 60retries: 1 message: Authentication plugin ‘caching_sha2_password’ reported error: Authenticat ALTER USER userip或% IDENTIFIED WITH mysql_native_password BY your_password;centos7 服务器改名
要在 CentOS 7 服务器上更改主机名可以按照以下步骤进行操作
1.登录到 CentOS 7 服务器以具有管理员权限的用户身份例如 root 用户。
2.打开终端并执行以下命令来编辑 /etc/hostname 文件
vim /etc/hostname3.在编辑器中将当前的主机名替换为新的主机名并保存文件。
4.重启服务器以使主机名更改生效
reboot5.在服务器重新启动后新的主机名将生效。
可能用到的命令
删除容器docker rm -f 容器名或id删除镜像 docker rmi 镜像名和id查看镜像信息docker images mysql赋予新用户全部权限示例GRANT ALL PRIVILEGES ON database_name.* TO usernamelocalhost IDENTIFIED BY password;查看当前MySQL用户及其权限SELECT User, Host, authentication_string FROM mysql.user;确认新用户具有创建数据库的权限。如果该用户没有创建数据库的权限则可以使用以下命令授权GRANT CREATE ON *.* TO new_userlocalhost;
FLUSH PRIVILEGES;如果在远程主机上也需要授予 new_user 用户创建数据库的权限则可以使用以下命令GRANT CREATE ON *.* TO new_userremote_host;
FLUSH PRIVILEGES;备注 部分问题参考https://www.jianshu.com/p/4d09ee0e973f解决