如何更改 MySQL 本地登录时的默认端口?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改 MySQL 本地登录时的默认端口?相关的知识,希望对你有一定的参考价值。

原来机子上有个 mysql 版本不明 密码不明 所以后来按照网友的办法新装了一个 MySQL 5.5.22 使用貌似是正常的 指定了监听 3307 端口 并且设置了独立的 basedir 和 my.cnf 但是比较讨厌的是现在在命令行输入 mysql -uroot -p 这样登录时默认是登录的 3307 的新 MySQL 而且如果要登录原来那个貌似必须要 mysql -uroot -p -h127.0.0.1 -P3306 非常麻烦(虽然不知道密码的我实际上也没登录进去过)所以……如题!

1.一般情况下都在安装目录下,如果不再的话,就找一下c:\\windows、c:\\windows\\system32下面或者使用windows的搜索功能找一下my.ini。
例如我的在:D:\\Program Files\\MySQL\\MySQL Server 5.1\\my.ini
如果是XAMPP安装方式的就在xampp\\mysql目录下的相关.ini文件。
2.修改下面这个地方:[client]
port=3306

3.如果提示修改不了可能需要把相关软件和服务先停掉,win7的可能要以管理员方式打开,修改后要重启服务才起作用。
参考技术A 修改你3307端口的my.cnf里面的sock文件位置,不要使用默认的/tmp/mysql.sock , 因为你3306的数据库也是用的这个, 谁后启动就是谁的。
你平时直接mysql不使用IP地址的连接是走sock文件连接的,3307数据库是后启动的,所以你连接的是3307数据库。
参考技术B 1. 编辑 用户目录下的 .my.cnf 文件.
把my.cnf的client节的部分复制进去就可以了. 密码,帐号,端口都可以设置.
or
2. 使用别名. alias

如何在 React.JS 中更改登录/注销时的导航栏文本?

【中文标题】如何在 React.JS 中更改登录/注销时的导航栏文本?【英文标题】:How to change NavBar text on login/logout in React.JS? 【发布时间】:2020-04-22 02:39:48 【问题描述】:

我的项目中有一个导航栏,我从App.js 内部调用它。根据我是否登录,我想呈现NavBar 的不同视图。如果已登录,我希望 NavBar 有一个注销按钮。如果注销,我希望NavBar 有登录按钮。我使用localStorage 中的令牌来检查我是否已登录。登录后,localStorage 中存在令牌。在注销/登录之前,localStorage 中没有令牌密钥。我将此令牌作为状态传递给NavBar,如下所示:

export default function App() 
   const [loggedIn, setLoggedIn] = useState(localStorage.getItem("token"));
   return (
      <div>
         <Router>
            <Navbar isAuth=loggedIn />
            <Route exact path="/" exact component=Home />
            <Route path="/login" component=Login />
            <PrivateRoute path="/dashboard" component=Dashboard />
         </Router>
      </div>
   );
 

现在从NavBar组件,我用这个prop来渲染NavBar的不同视图,如下图:

const NavBar = props => 
   const classes = useStyles();

   if (props.isAuth !== null) 
      return (
         <div className=classes.root>
            <AppBar position="static">
               <Toolbar>
                  <Typography variant="h6" className=classes.title>
                     <Link
                        href="/"
                        style= textDecoration: "none", color: "white" 
                     >
                        Timetracker
                     </Link>
                  </Typography>
                  <Link href="/" style= color: "white" >
                     <Button color="inherit" onClick=auth.logout>
                        Logout
                     </Button>
                  </Link>
               </Toolbar>
            </AppBar>
         </div>
      );
    else 
      return (
         <div className=classes.root>
            <AppBar position="static">
               <Toolbar>
                  <Typography variant="h6" className=classes.title>
                     <Link
                        href="/"
                        style= textDecoration: "none", color: "white" 
                     >
                        Timetracker
                     </Link>
                  </Typography>
                  <Link href="/login" style= color: "white" >
                     <Button color="inherit">Login</Button>
                  </Link>
               </Toolbar>
            </AppBar>
         </div>
      );
   
;

export default NavBar;

问题是,NavBar 在我登录后不会立即更新。我必须手动刷新页面才能呈现新的NavBar。同样在注销时,它不会自我更新,仅在手动刷新时更新。有什么问题以及如何解决这个问题?

【问题讨论】:

【参考方案1】:

您还需要添加&lt;Switch&gt;。来自文档:

渲染第一个或与位置匹配的孩子。

&lt;Switch&gt; 的独特之处在于它专门呈现一条路线。相比之下,与该位置匹配的每个 &lt;Route&gt; 都会以包容性方式呈现。

就像下面这样:

<Router>
  <Switch>
     <Navbar isAuth=loggedIn />
     <Route exact path="/" exact component=Home />
     <Route path="/login" component=Login />
     <PrivateRoute path="/dashboard" component=Dashboard />
  </Switch>
</Router>

在此处进一步阅读:Router

希望对你有帮助!

【讨论】:

使用 switch 会停止渲染我的其他组件,例如 Home、Login 在访问它们的 URL 时。我认为问题在于 App 和 NavBar 之间的传递状态。【参考方案2】:

如果您更改 localStorage 中 token 的值,您的应用程序状态将不会更新。

您需要确保更新状态,如果有帮助,我已添加 sandbox。

【讨论】:

按钮在导航栏内部,而不是在您的代码演示的外部。 然后你需要有一个从父级作为道具发送的函数,当你点击按钮时你会调用它。这样您就可以控制父类中的状态。请参阅lifting state up,它应该会有所帮助。【参考方案3】:

我找到了一个简单的解决方案: 使用 componentDidMount() 或 useEffect() 函数,该函数将在加载 NavBar 页面时自动呈现。 在此函数中,使用 setInterval() 函数不断检索身份验证状态(例如,5000 的间隔)。这将不断刷新 NavBar,并立即更改按钮。 我想您必须将身份验证检查放在 NavBar 组件本身中,而不是使用道具。我将想要更改的特定按钮放在名为 NavBarUser 的单独组件中,该组件更改了“登录 |注册”到“注销”并包含用户头像。然后我将此组件插入到 NavBar 本身的适当位置。 这就是我的代码的样子: ``` 导入反应, useState,useEffect from 'react'; 从'./Avatar'导入头像; 从 'react-router-dom' 导入 BrowserRouter as Router, Link ;

const NavBarUser = () => 

    const [user, setUser] = useState();
    useEffect(() => 
     /*
        setInterval was used in order to refresh the page constantly
    in order to have the "logout" button show immediately in place of
    "login", as soon as user logs out.
    */
        setInterval(() => 
            const userString = localStorage.getItem("user");
            const user = JSON.parse(userString);
            setUser(user);
            , [])
    , 5000);


    const logout = () => 
        return localStorage.removeItem("user");
    

    if (!user) 
        return (
            <div className="navbar-nav ml-auto">
                <Link to="/login" className="nav-item nav-link">Login</Link> <span 
className="nav-item nav-link">|</span> <Link to="/SignUp" className="nav-item nav- 
link">Sign Up</Link>
            </div>
        )
    
    if (user) 
       return (
         <div className="navbar-nav ml-auto">
            <Link to="/" className="nav-item nav-link" onClick=logout>Logout</Link>
                    <Avatar img="/images/Eat-healthy.jpg" />
            </div>
        )
    





export default NavBarUser;

```

【讨论】:

【参考方案4】:

我是这样解决这个问题的:

首先,我在App 类中创建了一个isLoggedIn 状态。我给了它一个componentDidMount() 方法,它会在应用程序启动时从cookie 中获取登录状态。然后我创建了globalLoginglobalLogout 方法作为箭头函数,它们将isLoggedIn 状态相应地设置为true 或false。我将Nav 组件作为道具传递给isLoggedIn 状态,并通过LoginNav 路由globalLoginglobalLogout 方法。然后可以使用this.props.globalLogout();this.props.globalLogin();LoginNav 调用这些方法。

这是我的App.js 的简化版。

class App extends Component 
  constructor(props)
    super(props);
    this.state = 
      isLoggedIn: false,
    
  
  componentDidMount() 
    const token = Cookie.get("token") ? Cookie.get("token") : null;
    if (token) 
      this.setState( "isLoggedIn": true );
    
  
  globalLogin = () => 
    this.setState( "isLoggedIn": true );
  
  globalLogout = () => 
    this.setState( "isLoggedIn": false );
  

  render() 
    return (
      <Router>
        <div className="App">
          <Nav isLoggedIn=this.state.isLoggedIn globalLogout=this.globalLogout/>
          <Switch>
            <Route path="/" exact component=Home />
            <Route path="/login" exact>
              <Login globalLogin=this.globalLogin/>
            </Route>
          </Switch>
        </div>
      </Router>
    );
  

编辑:使用 history.push 在上面的登录模块中不起作用,所以我添加了一个中间件来处理道具

render() 
    const LoginIntermediate = (props) => 
      return (
        <Login ...props globalLogin=this.globalLogin/>
      )
    
    return (
      <Router>
        <div className="App">
          <Nav isLoggedIn=this.state.isLoggedIn globalLogout=this.globalLogout/>
          <Switch>
            <Route path="/" exact component=Home />
            <Route path="/login" exact component=LoginIntermediate />
          </Switch>
        </div>
      </Router>
    );
  

【讨论】:

以上是关于如何更改 MySQL 本地登录时的默认端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何修改修改mysql默认端口号3306

如何将mysql的默认端口从3306更改为3360

如何更改Apache中的HTTP监听端口

如何更改 React App 的默认本地主机端口 [重复]

登录mysql时的一些命令

linux下已经更改了ssh默认登陆端口22,如何扫描出来更改后的端口号呢。使用NMAP扫描不到,有其他方法么?