参考文档: https://www.cnblogs.com/hankguo/p/8204868.html https://blog.csdn.net/xyang81/article/details/51792144

1,安装boost:需要安装python

通过日志查看 ./b2 -q
./bootstrap 缺少软件,pyconfig.h 安装python
fatal error: pyconfig.h: 没有那个文件或目录,只有pyconfig-64文件,并且最好安装py3.6

2,安装python

发现yum可执行文件错误:

  • 网络问题:不正确
  • yum文件格式问题

yum安装:可执行文件错误,解决:检查所有的头部文件,是否有#2.7以及缩进是否正确
https://blog.csdn.net/weixin_42350858/article/details/104819588

3,安装boost:

./boostrap
./b2

4,安装mysql

  1. cd mysql
  2. mkdir build
  3. cmake . -DWITH_DEBUG=on \ .是指上层
  4. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8 \
  5. -DMYSQL_DATADIR=/usr/local/mysql-8/data \
  6. -DWITH_BOOST=/mydata/boost /解压目录
  7. -DFORCE_INSOURCE_BUILD=1 /根据提示
  8. -DWITH_SSL=system /openssl

make & make install

The source directory “/mydata” does not appear to contain CMakeLists.txt.
建立build目录,需要在上层.是指上层

6,创建用户以及用户组


7,复制配置文件

进入安装目录,复制/etc/my.cnf ->安装目录/ config,并命名,代表主从不同配置

8,编写配置文件:

mysql环境搭建 - 图1
注;将socket的位置更改为/tmp/socket 可以用端口命名sock文件,其他的根据自己情况,server-id主从必须不同 1/2,记得授权文件夹给mysql,无法执行某操作可以先授权

8,初始化并记住最后的初始密码

目录在mysql安装目录运行
./bin/mysqld --defaults-file=/usr/local/mysql/conf/3306.cnf --initialize

9,运行mysql

文件根据你具体的位置来填写
./bin/mysqld --defaults-file=/usr/local/mysql/conf/3306.cnf

10,进入客户端

新打开一个命令行,文件名称一定跟自己设置的一样
./mysql -uroot -p123456 --socket=/usr/local/mysql/sock/3306.sock
设置密码
ALTER USER root@localhost IDENTIFIED BY "root";
注:直接复制的sql一定注意字符’’等,否则会不正确

11,创建复制用户

新建一个复制帐户,用于从库复制binlog使用:

  1. CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX';
  2. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; 而不是127.0.0.1
  3. flush privileges
  4. //注意这里是mysql_native,防止了需要传递秘钥的errro

12,启动从库:

设置与主库相同,端口不同,以及server_id不同

13,在从库启动复制

  1. stop slave; #停止slave
  2. CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306,MASTER_USER='repl',
  3. MASTER_PASSWORD='root',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=1017;
  4. // 指向主库设置,其中最后两个参数为master中查询出来的值 见下图 什么时候开始什么时候查询
  5. start slave; #启动slave

mysql环境搭建 - 图2

14,查看状态

show slave status\G;
mysql环境搭建 - 图3

问题:

1,cnf文件指定错误,太乱 sock文件名错误:一定要指定自己的名称,配置文件,sock。

2,注意大小写mysql的语句
3,my.cnf不要自己建立,最好复制/etc/my.cnf
4,直接复制的sql语句可能符号不正确

5,以下错误在上文均已避免
Master command COM_REGISTER_SLAVE failed: Access denied for user ‘repl’@’%’ (using password: YES) (Errno: 1045)
错误原因:从服务器权限不足,在主服务器配置权限
在主服务器的客户端执行:
GRANT REPLICATION SLAVE ON . TO ‘repl’@’%’;
flush privileges;

6,
若报错:
error connecting to master ‘repl@192.168.0.101:3306’ - retry-time: 60 retries: 2 message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.
错误原因:密码加密方式不支持,
在主服务器执行以下命令:
ALTER USER ‘repl’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
FLUSH PRIVILEGES;
最后在主服务器解锁表
unlock tables;

命令行

netstat -nltp|grep mysql 查看端口
select user,host,plugin,authentication_string from mysql.user \G查看用户
./bin/mysqld --defaults-file=/usr/local/mysql-8/conf/my.cnf 运行
./mysql -uroot -proot --socket=/tmp/mysql3306.sock 进入

master:

gdb —args /repl/build/runtime_output_directory/mysqld —basedir=/usr/local/mysql-rep —datadir=/usr/local/mysql-rep/data/3308 —skip-grant-tables —bind-address=127.0.0.1 —port=3308 —socket=/tmp/sock/3308.sock —user=mysql
以gdb启动可以调试不在运行中的mysql,如果调试正在运行的,请使用attach

gdb运行后,多按两下回车,才能连接

top可以看端口

不同情况: 如果要调试启动过程,可以用gdb启动该程序,先打断点,然后run

  1. rm -rf /usr/local/mysql-8/data/3306
  2. rm -rf /usr/local/mysql-8/data/3307
  3. 初始化
  4. /usr/local/mysql-8/bin/mysqld --defaults-file=/usr/local/mysql-8/config/3306.cnf --initialize-insecure
  5. /usr/local/mysql-rep/bin/mysqld --defaults-file=/usr/local/mysql-rep/config/3308.cnf --initialize-insecure
  6. 运行
  7. /usr/local/mysql-8/bin/mysqld --defaults-file=/usr/local/mysql-8/config/3306.cnf
  8. /usr/local/mysql-rep/bin/mysqld --defaults-file=/usr/local/mysql-rep/config/3308.cnf
  9. 进入
  10. /usr/local/mysql-8/bin/mysql -uroot --socket=/tmp/sock/3306.sock
  11. /usr/local/mysql-rep/bin/mysql -uroot --socket=/tmp/sock/3308.sock
  12. 修改密码
  13. ALTER USER root@localhost IDENTIFIED BY "root";
  14. CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'root';
  15. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  16. flush privileges
  17. show master status

slave:

  1. 初始化
  2. /usr/local/mysql-8/bin/mysqld --defaults-file=/usr/local/mysql-8/config/3307.cnf --initialize initialize-insecure
  3. 运行
  4. /usr/local/mysql-8/bin/mysqld --defaults-file=/usr/local/mysql-8/config/3307.cnf
  5. 进入
  6. /usr/local/mysql-8/bin/mysql -uroot -p --socket=/tmp/sock/3307.sock
  7. 修改密码
  8. ALTER USER root@localhost IDENTIFIED BY "root";
  9. stop slave; #停止slave
  10. CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306,MASTER_USER='repl',
  11. MASTER_PASSWORD='root',MASTER_LOG_FILE='xx',MASTER_LOG_POS=xx;
  12. // 指向主库设置,其中最后两个参数为master中查询出来的值 见下图 什么时候开始什么时候查询
  13. start slave; #启动slave
  14. show slave status\G;

[

](https://www.cnblogs.com/hankguo/p/8204868.html)