• mysql 安装


    Linux下安装mysql数据库
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    然后使用tar命令将服务器下载好的安装包解压在当前目录

    ln -s  mysql-5.7.26-linux-glibc2.12-x86_64 /var/lib/mysql
    mv  mysql-5.7.26-linux-glibc2.12-x86_64  /var/lib/mysql

    groupadd mysql
    useradd -r -g mysql mysql


    初始化数据库
    5.7.6之后的版本初始化数据库不再使用mysql_install_db,而是使用: bin/mysqld --initialize
    bin/mysqld --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/data/mysql_db

    mysql 5.7版本初始化数据库后会默认生成一个初始的登录密码,第一次登录要使用初始密码
    信息如下:

    2018-10-24T05:46:33.446315Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2018-10-24T05:46:33.448636Z 0 [Warning] You need to use --log-bin to make --binlog-format work.
    2018-10-24T05:46:34.733390Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2018-10-24T05:46:34.912448Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2018-10-24T05:46:34.979791Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2ac659b8-d750-11e8-8fa1-fa163efff95f.
    2018-10-24T05:46:34.982104Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2018-10-24T05:46:34.982589Z 1 [Note] A temporary password is generated for root@localhost: !+auH/*Ow7_j


    root@localhost: 后面的一字符串  !+auH/*Ow7_j 就是后面登录密码

    配置my.cnf

    mysql 5.7.6版本 mysql-5.7.26/support-files/下不存在my-default.cnf文件,需要在/etc/目录下创建my.cnf,并写入以下内容

    basedir = /web/mysql-5.7.26/  
    datadir = /web/mysql-5.7.26//data  
    port = 3306  
    socket = /web/mysql-5.7.26/data/mysql.sock
    log-error=/web/mysql-5.7.26/logs/mysql.log
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  



    将mysqld服务加入开机自启动项
    开机自启动

    cp {mysql}/support-files/mysql.server /etc/init.d/mysqld

    如果不按照上述操作,就只能使用{mysql}/bin/mysqld_safe & 命令来启动服务


    chkconfig --add mysql  
    serivce mysql start
    service mysql stop

    -----centos 7 ------

    vim /usr/lib/systemd/system/mysqld.service
    [Unit]
    Description=MySQL Community Server
    After=network.target
    After=syslog.target

    [Install]
    WantedBy=multi-user.target
    Alias=mysql.service

    [Service]
    User=mysql
    Group=mysql

    #systemctl status就是根据pid来判断服务的运行状态的
    PIDFile=/data/mysql/mysql.pid

    # 以root权限来启动程序
    PermissionsStartOnly=true

    # 设置程序启动前的必要操作。例如初始化相关目录等等
    #ExecStartPre=/data/mysql/bin/mysql-systemd-start pre

    # 启动服务
    ExecStart=/data/mysql/bin/mysqld_safe

    # 停止服务
    ExecStop=/data/mysql/bin/mysqladmin --login-path=local shutdown

    # Don't signal startup success before a ping works
    #ExecStartPost=/data/mysql/bin/mysql-systemd-start post

    # Give up if ping don't get an answer
    TimeoutSec=600

    #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
    Restart=always
    PrivateTmp=false

    LimitNOFILE=65535
    LimitNPROC=65535

    ------------------------

    systemctl start mysqld



    执行 ./mysql -u root -p 会要求输入密码
    密码就是在初始化数据库时生成的密码
    修改密码
    mysql> set password=password("123456");
    Query OK, 0 rows affected, 1 warning (0.27 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.26 sec)

    退出mysql并重启, 就可以用新密码登录mysql了
    如果想要用navicat等连接工具需要授权才能连接
    mysql>grant all on *.* to 'remote'@'%' identified by '123456';

    主从复制

    主库执行:
    mysql> grant replication slave on *.* to 'repl0'@'192.168.0.%' identified by '123456';

    从库执行:
    mysql> CHANGE MASTER TO master_host='192.168.0.121',master_user='repl0',master_password='123456', master_log_file='mysql-bin.000004',master_log_pos=844;
    mysql>start slave;
    mysql > SHOW SLAVE STATUS G

    ===========问题集锦=================

    如果忘记数据库密码的解决方法:

    1、初始化空密码: mysqld --initialize-insecure

    2、跳过授权列表 (skip-grant-tables)  修改完以后再注释掉。

    [mysqld]

    skip-grant-tables=1   

    mysql> set password = PASSWORD('123456');
    ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

    解决方法:

    先刷新一下权限表。
    mysql>  flush privileges;
    Query OK, 0 rows affected (0.01 sec)

    mysql> set password = PASSWORD('123456');
    ERROR 1133 (42000): Can't find any matching row in the user table
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    Query OK, 0 rows affected (0.00 sec)

    主从报错

    Last_Errno: 1782
    Last_Error: Error executing row event: '@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.'

    >stop slave sql_thread;

    >set GLOBAL GTID_MODE = ON_PERMISSIVE;

    ]>set GLOBAL GTID_MODE = OFF_PERMISSIVE;

    >set GLOBAL GTID_MODE = OFF;

    >start slave sql_thread;

    >start slave;

    Last_Error: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.

    Last_IO_Error: The replication receiver thread cannot start because the master has GTID_MODE = ON and this server has GTID_MODE = OFF.
    Last_SQL_Errno: 1781
    Last_SQL_Error: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.

    >set GLOBAL GTID_MODE = OFF_PERMISSIVE;

    >set GLOBAL GTID_MODE = ON_PERMISSIVE;

    >set GLOBAL GTID_MODE = ON;

    >start slave;

     -----------

    最近在部署MySQL主从复制架构的时候,碰到了"Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;  these UUIDs must be different for replication to work." 这个错误提示。即主从架构中使用了相同的UUID。检查server_id系统变量,已经是不同的设置,那原因是?接下来为具体描述。

    master_mysql> show variables like 'server_id';
    slave_mysql> show variables like 'server_id';

    查看是不同的。
    但是查看/mysql/data/auto.cnf发现里面的UUID是哦相同的。原因是mysql是直接从节点1上拷贝过来而导致。

    解决:mv /mysql/data/auto.cnf /mysql/data/auto.cnf.bak 重启mysql解决
    set global server_id=2;

    一、忽略错误后,继续同步。(该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。)
    
    1)、停止同步
    mysql>stop slave;
    2)、设置参数
    mysql>set global sql_slave_skip_counter =1;
    3)、启动同步并查看
    start slave;
    mysql> show slave statusG; 
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    二、重新做主从,完全同步。(该方法适用于主从库数据相差较大,或者要求数据完全统一的情况。)
    
    1)、进入主库,进行锁表,防止数据写入。注意:该处是锁定为只读状态,语句不区分大小写
    mysql> flush tables with read lock;
    2)、进行数据备份并解锁
    mysqldump -uroot -pYouPwd YourDB > bak.sql;
    mysql> UNLOCK TABLES;
    3)、查看master 状态并记录
    mysql> show master status;
    4)、把mysql备份文件传到从库机器,进行数据恢复
    5)、停止从库的状态
    mysql> stop slave;
    6)、从库执行mysql命令,导入数据备份
    7)、设置从库同步,具体参数请根据master status填写
    change master to master_host = '192.168.1.246', master_user = 'slave', master_port=3306, master_password='YourSalvePwd', master_log_file = 'mysqld-bin.000035', master_log_pos=120;
    8)、重新开启从同步
    mysql> start slave;
    9)、查看同步状态
    mysql> show slave statusG;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
  • 相关阅读:
    Github上fork的项目如何merge原Git项目
    【转】OS | 从一道面试题谈 Linux 下 fork 的运行机制
    鸡汤文 | 23 考研不想成为炮灰,应该努力到什么程度呢?
    OS | 文件系统总结
    OS | 银行家算法C语言实现
    Linux操作系统(七):BASH与Shell
    使用github action发布hexo博客到云服务器
    gozero单体服务使用泛型简化注册Handler路由
    用go把博客园博客下载到本地Hexo目录下
    oracle删除超过N天数据脚本
  • 原文地址:https://www.cnblogs.com/luck123/p/11358655.html
Copyright © 2020-2023  润新知