linux-msyql

Posted 小鱼等鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux-msyql相关的知识,希望对你有一定的参考价值。

### ubuntu msyql

安装mysql

// Ubuntu 18.04.1 LTS apt-get 安装
$sudo apt-get install mysql-server

 apt会自动安装依赖库和client。默认安装目录 /etc/mysql。 安装后可以 service mysql status 查看MySQL状态

 

重设密码

安装MySQL没有提示设置密码,有时会出现进不去MySQL客户端的情况,一是密码不对,二是没有设置默认密码

报错:ERROR 1045 (28000): Access denied for user \'root\'@\'localhost\' (using password: YES)

两种办法登录后修改密码

方法一:跳过验证登录

// 1.停止服务
$sudo /etc/init.d/mysqld stop
// 2.跳过验证 在[mysql]组下添加一行:skip-grant-tables   
$sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
// 3.启动服务
$sudo /etc/init.d/mysqld start
// 4.免密码登录后设置密码
$use mysql
$update user set authentication_string=password(\'123456\') where User=\'root\'
$flush privileges
// 5.删除:skip-grant-tables
$sudo vim /etc/mysql/mysql.conf.d/msyqld.cnf
// 6.重启服务
$sudo /etc/init.d/mysqld restart

方法二:默认密码登录

// Ubuntu默认密码所在文件 
// 找到password对应的值 登录数据库 然后修改密码 退出重启(重复方法一456步)
sudo cat /etc/mysql/debian.cnf

方法三:版本较高的mysql可能第一次不需要输入密码

mysql -u root

MySQL 允许远程访问

默认情况下 MySQL不允许远程链接,程序交互时可能需要开启。

// 打开配置文件,注释掉绑定IP(bind-address) 或 指定可链接的ip或 bind-address=*.
$sudo vim /etc/mysql/my.cnf 
// 登录MySQL 修改数据表,授权root用户在任意ip(\'%\')访问任意数据库(*.*)的任意权限(all privileges).生产环境可以指定固定用户名和固定的ip地址。
mysql> grant all privileges on *.* to \'root\'@\'%\' identified by \'123456\' with grant option;
// 退出重启数据库
$sudo service mysqld restart

 

mysql配置双主备份

数据库备份原理主要是是读取其他数据库变更的语句,然后在本地执行一遍,保证内容一致。在主备模式下,主数据库将操作写入一个log文件中,从数据库创建一个channel,开启一个读文件线程,读取主的log变动保存到本地文件,另一个执行语句线程执行拉取来的log文件中的sql语句来同步。开始配置前先保证双方MySQL都允许远程访问。先配置主从模式,主主反向再配置一遍即可。

假定两台服务器:192.168.10.100为主,192.168.10.101为备。

配置同步前,最好保证主从数据库的初始状态一致。

 

同步初态步骤
//1、将主服务器要同步的数据库加锁,避免同步时发生改变。
mysql> use database_name;
mysql> flush tables with read lock; 
//2、使用mysqldump工具导出数据:
msyql> mysqldump
-uroot -pxxx database_name >database_name.sql
//3、备份完成后,解锁数据库:
mysql> unlock tables;
//4、将初始数据导入从数据库:
mysql> create database database_name;
mysql
>use database_name;
mysql>
source database_name.sql;

 

 

配置主:

配置前,登录100的MySQL输入: show master status\\G;   显示 Empty set;

//编辑MySQL配置文件,在[mysqld]下面添加一些配置信息,保存后重启MySQL。
$sudo vim /etc/mysql/my.cnf

 


#主数据库id为1,不能相同。
server-id=1
#开启二进制日志,指定名字为mysql-bin
log-bin=mysql-bin
#中继日志名,复制线程先把远程变化复制到此日志,再执行
relay_log=mysqld-relay-bin
#中继日志执行后,变化是否需要计入自己的bianary-log,当此服务器做另一个服务器的主服务器,需要打开。
log-slave-updates=1

#需要同步的库,不指定默认同步全部库                            
binlog-do-db=dh_sign  
#主库支持读写操作,若读写分离可配置1
#read-only=0


##也可以配置不需要同步的库,其他库同步
#binlog-ignore-db=information_schema
#binlog-ignore-db=sys
#binlog-ignore-db=perfromance_schema

##最安全的设置,每次提交事务之前会将二进制同步到磁盘上,保证服务器崩溃时不会丢失事件
sync_binlog=1

##自增设置,在双主都可以写入时,会产生自增主键的冲突问题,配置错落自增。自增间隔n是可写的mysql实例数量
auto-increment-increment=2
auto-increment-offset=1

#GTID模式
gtid-mode=on
enforce-gtid-consistency=1

## slave并发优化
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

保存退出,并重启MySQL。 service mysqld restart; 

再次登录MySQL,输出主的状态。  mysql> show master status\\G;   显示为:

mysql> show masterstatus\\G;
*************************** 1. row ***************************
             File: mysql-bin.000059
         Position: 1046
     Binlog_Do_DB: dh_sign
 Binlog_Ignore_DB:
Executed_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:1-46,
f6ea3916-feb6-11e8-9084-04d3b0eb5843:1-71
1 row in set (0.00 sec)

ERROR:
No query specified

可以看到log文件名,同步log的起始位置、log记录的库和忽略库、Gtid编号信息,说明配置成功。关于Gtid可以查看:

Gtid-weblog-1

Gtid-weblog-2

 

配置从:

登录从服务器(101)的mysql,查看从服务的状态: show slave status\\G; 同样显示为空。

// 如果开启了Gtid,直接执行此条语句,指定主服务即可。
mysql> change master to master_host=\'192.168.10.100\',master_user=\'root\',master_password=\'123456\',master_port=3306,master_auto_position=1;

// 如果没有开启,需要指定log文件位置等。master_log_file和master_log_pos为刚查看的主库的log文件和位置。
# mysql> change master to master_host=\'192.168.10.100\',master_user=\'root\',master_password=\'123456\',master_log_file=\'mysql-bin.000059\',master_log_pos=1046;

// 设置主服务可能会有报错信息,按相关提示输入指令即可,可能涉及到如下指令:
# STOP SLAVE IO_THREAD FOR CHANNEL \'\';
# START SLAVE IO_THREAD FOR CHANNEL \'\';
# STOP SLAVE;
# RESET SLAVE;// 内存中依然保存主库ip,port等
# RESET SLAVE ALL; // 清空所有slave配置,show slave status\\G,为空。

退出mysql后再次进入(或重启),再次查看从状态: show slave status\\G; 显示为:

mysql> show slave status\\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.239
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000016
          Read_Master_Log_Pos: 36050
               Relay_Log_File: mysqld-relay-bin.000231
                Relay_Log_Pos: 454
        Relay_Master_Log_File: mysql-bin.000016
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 36050
              Relay_Log_Space: 915
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
                  Master_UUID: e18aca99-033b-11e9-a3d7-90f1b0f14435
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:46
            Executed_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:1-46,
f6ea3916-feb6-11e8-9084-04d3b0eb5843:1-71
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified
Slave_IO_Running和Slave_SQL_Running的值都为Yes时证明可以从主库自动同步了,可以在主库100 insert,在101 select或delete验证是否同步。
至此主从配置完成,要配置双主,只要将步骤反过来再做一遍即可,注意主从server-id配置不能相同。

配置时发现有时会出现主服务在重启时会改变log文件和位置信息,可能导致从服务配置失效。应按顺序来配置。如出现错误,尝试从服务配置后不重启,重新登录即可。
 

 

以上是关于linux-msyql的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数